Ubiquity  2.0.2
php rapid development framework
Reflexion.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Ubiquity\orm\parser;
4 
7 
13 class Reflexion {
14 
15  public static function getProperties($instance) {
16  if (\is_string($instance)) {
17  $instance=new $instance();
18  }
19  $reflect=new \ReflectionClass($instance);
20  $props=$reflect->getProperties();
21  return $props;
22  }
23 
24  public static function getMethods($instance, $filter=null) {
25  $reflect=new \ReflectionClass($instance);
26  $methods=$reflect->getMethods($filter);
27  return $methods;
28  }
29 
30  public static function getKeyFields($instance) {
31  return Reflexion::getMembersNameWithAnnotation(get_class($instance), "@id");
32  }
33 
34  public static function getMemberValue($instance, $member) {
35  $prop=self::getProperty($instance, $member);
36  $prop->setAccessible(true);
37  return $prop->getValue($instance);
38  }
39 
40  public static function setMemberValue($instance, $member,$value) {
41  $prop=self::getProperty($instance, $member);
42  if($prop){
43  $prop->setAccessible(true);
44  $prop->setValue($instance,$value);
45  return true;
46  }
47  return false;
48  }
49 
50  public static function getProperty($instance, $member) {
51  $reflect=new \ReflectionClass($instance);
52  $prop=false;
53  if($reflect->hasProperty($member))
54  $prop=$reflect->getProperty($member);
55  return $prop;
56  }
57 
58  public static function getPropertiesAndValues($instance, $props=NULL) {
59  $ret=array ();
60  $className=get_class($instance);
61  if (is_null($props))
62  $props=self::getProperties($instance);
63  foreach ( $props as $prop ) {
64  $prop->setAccessible(true);
65  $v=$prop->getValue($instance);
66  if (OrmUtils::isSerializable($className, $prop->getName())) {
67  if (OrmUtils::isNotNullOrNullAccepted($v, $className, $prop->getName())) {
68  $name=OrmUtils::getFieldName($className, $prop->getName());
69  $ret[$name]=$v;
70  }
71  }
72  }
73  return $ret;
74  }
75 
76  public static function getAnnotationClass($class, $annotation) {
77  $annot=Annotations::ofClass($class, $annotation);
78  return $annot;
79  }
80 
81  public static function getAnnotationMember($class, $member, $annotation) {
82  $annot=Annotations::ofProperty($class, $member, $annotation);
83  if (\sizeof($annot) > 0)
84  return $annot[0];
85  return false;
86  }
87 
88  public static function getAnnotationsMethod($class, $method, $annotation) {
89  $annots=Annotations::ofMethod($class, $method, $annotation);
90  if (\sizeof($annots) > 0)
91  return $annots;
92  return false;
93  }
94 
95  public static function getMembersAnnotationWithAnnotation($class, $annotation) {
96  $props=self::getProperties($class);
97  $ret=array ();
98  foreach ( $props as $prop ) {
99  $annot=self::getAnnotationMember($class, $prop->getName(), $annotation);
100  if ($annot !== false)
101  $ret[$prop->getName()]=$annot;
102  }
103  return $ret;
104  }
105 
106  public static function getMembersWithAnnotation($class, $annotation) {
107  $props=self::getProperties($class);
108  $ret=array ();
109  foreach ( $props as $prop ) {
110  $annot=self::getAnnotationMember($class, $prop->getName(), $annotation);
111  if ($annot !== false)
112  $ret[]=$prop;
113  }
114  return $ret;
115  }
116 
117  public static function getMembersNameWithAnnotation($class, $annotation) {
118  $props=self::getProperties($class);
119  $ret=array ();
120  foreach ( $props as $prop ) {
121  $annot=self::getAnnotationMember($class, $prop->getName(), $annotation);
122  if ($annot !== false)
123  $ret[]=$prop->getName();
124  }
125  return $ret;
126  }
127 
128  public static function isNullable($class, $member) {
129  $ret=self::getAnnotationMember($class, $member, "@column");
130  if (!$ret)
131  return false;
132  else
133  return $ret->nullable;
134  }
135 
136  public static function getDbType($class, $member) {
137  $ret=self::getAnnotationMember($class, $member, "@column");
138  if (!$ret)
139  return false;
140  else
141  return $ret->dbType;
142  }
143 
144  public static function isSerializable($class, $member) {
145  if (self::getAnnotationMember($class, $member, "@transient") !== false || self::getAnnotationMember($class, $member, "@manyToOne") !== false || self::getAnnotationMember($class, $member, "@manyToMany") !== false || self::getAnnotationMember($class, $member, "@oneToMany") !== false)
146  return false;
147  else
148  return true;
149  }
150 
151  public static function getFieldName($class, $member) {
152  $ret=self::getAnnotationMember($class, $member, "@column");
153  if ($ret === false || !isset($ret->name))
154  $ret=$member;
155  else
156  $ret=$ret->name;
157  return $ret;
158  }
159 
160  public static function getTableName($class) {
161  $ret=Reflexion::getAnnotationClass($class, "@table");
162  if (\sizeof($ret) === 0) {
163  $posSlash=strrpos($class, '\\');
164  if ($posSlash !== false)
165  $class=substr($class, $posSlash + 1);
166  $ret=$class;
167  } else {
168  $ret=$ret[0]->name;
169  }
170  return $ret;
171  }
172 
173  public static function getMethodParameters(\ReflectionMethod $method) {
174  $result=array ();
175  foreach ( $method->getParameters() as $param ) {
176  $result[]=$param->name;
177  }
178  return $result;
179  }
180 }
static getMembersWithAnnotation($class, $annotation)
Definition: Reflexion.php:106
static getProperties($instance)
Definition: Reflexion.php:15
static getKeyFields($instance)
Definition: Reflexion.php:30
static getAnnotationsMethod($class, $method, $annotation)
Definition: Reflexion.php:88
static getMethodParameters(\ReflectionMethod $method)
Definition: Reflexion.php:173
static isNotNullOrNullAccepted($v, $className, $member)
Definition: OrmUtils.php:116
static setMemberValue($instance, $member, $value)
Definition: Reflexion.php:40
static getDbType($class, $member)
Definition: Reflexion.php:136
static getPropertiesAndValues($instance, $props=NULL)
Definition: Reflexion.php:58
Utilitaires de Reflexion.
Definition: Reflexion.php:13
static isSerializable($class, $member)
Definition: OrmUtils.php:25
static getAnnotationClass($class, $annotation)
Definition: Reflexion.php:76
static getMembersNameWithAnnotation($class, $annotation)
Definition: Reflexion.php:117
static getMemberValue($instance, $member)
Definition: Reflexion.php:34
static getMethods($instance, $filter=null)
Definition: Reflexion.php:24
static getFieldName($class, $member)
Definition: OrmUtils.php:41
static getMembersAnnotationWithAnnotation($class, $annotation)
Definition: Reflexion.php:95
static getFieldName($class, $member)
Definition: Reflexion.php:151
static isNullable($class, $member)
Definition: Reflexion.php:128
static getAnnotationMember($class, $member, $annotation)
Definition: Reflexion.php:81
static isSerializable($class, $member)
Definition: Reflexion.php:144
static getProperty($instance, $member)
Definition: Reflexion.php:50