1 <?php 2 /** 3 4 echo Obj::new('Redis'); 5 echo Obj::new('Redis')->method('set')?->isPublic(); 6 7 */ 8 9 class Obj extends ReflectionClass 10 { 11 public static function std(?array $attrs = null) 12 { 13 $std = new \stdClass(); 14 foreach ($attrs as $key => $value) { 15 is_numeric($key) ? $std->$value = '' : $std->$key = $value; 16 } 17 return $std; 18 } 19 20 public static function new($argument) 21 { 22 return new static($argument); 23 } 24 25 public function constant($name) 26 { 27 return $this->getConstant($name); 28 } 29 30 public function property($name) 31 { 32 try { 33 return $this->getProperty($name); 34 } catch (\ReflectionException $e) { 35 return null; 36 } 37 } 38 39 public function method($name) 40 { 41 try { 42 return $this->getMethod($name); 43 } catch (\ReflectionException $e) { 44 return null; 45 } 46 } 47 48 49 public function __toString() 50 { 51 $items = $this->getReflectionConstants(); 52 foreach ($items as $key => $item) { 53 $class['const'][] = sprintf('const %s = %s;', $item->getName(), $item->getValue()); 54 } 55 56 $items = $this->getProperties(); 57 foreach ($items as $key => $item) { 58 $class['prop'][] = sprintf('%s %s = "%s"', implode(' ', Reflection::getModifierNames($item->getModifiers())), $item->getName(), $item->getDefaultValue()); 59 } 60 61 $items = $this->getMethods(); 62 foreach ($items as $key => $item) { 63 $params = $item->getParameters(); 64 $param = ''; 65 if ($params) { 66 foreach ($params as $item1) { 67 $param .= $item1->getType() . ' ' . $item1->getName(); 68 if ($item1->isDefaultValueAvailable()) { 69 $param .= '=' . $item1->getDefaultValue() . ', '; 70 } else { 71 $param .= ', '; 72 } 73 } 74 $param = rtrim($param, ', '); 75 } 76 77 $class['method'][] = sprintf('%s %s(%s )', implode(' ', Reflection::getModifierNames($item->getModifiers())), $item->name, $param); 78 } 79 80 $output = array_merge($class['const'] ?? [], $class['prop'] ?? [], $class['method'] ?? []); 81 82 return implode("\n", $output); 83 } 84 }
标签:反射,return,name,打印,param,public,item,PHP,class From: https://www.cnblogs.com/zbseoag/p/17434747.html