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

UIntrospection   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 57
dl 0
loc 84
ccs 0
cts 77
cp 0
rs 10
c 0
b 0
f 0
wmc 18

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getFileName() 0 3 1
A getClassCode() 0 4 1
A getMethodCode() 0 12 3
A getChildClasses() 0 10 3
B closure_dump() 0 35 8
A getLoadedViews() 0 8 2
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