Passed
Push — master ( ed813f...432706 )
by Jean-Christophe
02:43
created

UIntrospection::getLoadedViews()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 2
dl 0
loc 8
ccs 0
cts 8
cp 0
crap 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Ubiquity\utils\base;
4
5
class UIntrospection {
6
7
	public static function getClassCode($classname) {
8
		$r=new \ReflectionClass($classname);
9
		$lines=file($r->getFileName());
10
		return $lines;
11
	}
12
13
	public static function getFileName($classname) {
14
		$r=new \ReflectionClass($classname);
15
		return $r->getFileName();
16
	}
17
18
	public static function getLoadedViews(\ReflectionMethod $r, $lines) {
19
		$matches=[ ];
20
		$code=self::getMethodCode($r, $lines);
21
		\preg_match_all('@(?:.*?)\$this\-\>loadView\([\'\"](.+?)[\'\"](?:.*?)@s', $code, $matches);
22
		if (isset($matches[1])) {
23
			return $matches[1];
24
		}
25
		return [ ];
26
	}
27
28
	public static function getMethodCode(\ReflectionMethod $r, $lines) {
29
		$str="";
30
		$count=\sizeof($lines);
31
		$sLine=$r->getStartLine();
32
		$eLine=$r->getEndLine();
33
		if ($sLine == $eLine)
34
			return $lines[$sLine];
35
		$min=\min($eLine, $count);
36
		for($l=$sLine; $l < $min; $l++) {
37
			$str.=$lines[$l];
38
		}
39
		return $str;
40
	}
41
42
	public static function closure_dump(\Closure $c) {
43
		$str='function (';
44
		$r=new \ReflectionFunction($c);
45
		$params=array ();
46
		foreach ( $r->getParameters() as $p ) {
47
			$s='';
48
			if ($p->isArray()) {
49
				$s.='array ';
50
			} else if ($p->getClass()) {
51
				$s.=$p->getClass()->name . ' ';
52
			}
53
			if ($p->isPassedByReference()) {
54
				$s.='&';
55
			}
56
			$s.='$' . $p->name;
57
			if ($p->isOptional()) {
58
				$s.=' = ' . \var_export($p->getDefaultValue(), TRUE);
59
			}
60
			$params[]=$s;
61
		}
62
		$str.=\implode(', ', $params);
63
		$str.=')';
64
		$lines=file($r->getFileName());
65
		$sLine=$r->getStartLine();
66
		$eLine=$r->getEndLine();
67
		if($eLine===$sLine){
68
			$str.=strstr(strstr($lines[$sLine-1],"{"),"}",true)."}";
69
		}else{
70
			$str.=strstr($lines[$sLine-1],"{");
71
			for($l=$sLine; $l < $eLine-1; $l++) {
72
				$str.=$lines[$l];
73
			}
74
			$str.=strstr($lines[$eLine-1],"}",true)."}";
75
		}
76
		return $str;
77
	}
78
79
	public static function getChildClasses($baseClass){
80
		$children  = [];
81
		foreach(\get_declared_classes() as $class){
82
			echo $class."<br>";
83
			$rClass=new \ReflectionClass($class);
84
			if($rClass->isSubclassOf($baseClass)){
85
				$children[] = $class;
86
			}
87
		}
88
		return $children;
89
	}
90
}
91