demmonico / reflection
用于处理类反射的辅助函数和特性
v2.0.2
2018-06-27 15:05 UTC
Requires
- php: ~7.0
README
描述
用于处理类反射的辅助函数和特性
组件
ReflectionHelper
用于处理类反射的辅助函数。是其他组件的基础
用法
- 获取类方法的列表
ReflectionHelper::getMethods($className, $filter=null, $prefix=null);
- 获取类常量的列表
ReflectionHelper::getConstants(string $className, ?string $prefix = ''): array
- 检测变量的类型(数组、整型、字符串等)
ReflectionHelper::detectVarType($var, $allowTypesArr=[], $default=null)
ConstantTrait
处理对类的常量标签的魔术调用,以获取类常量的数组或通过其值获取单个常量标签
用法
源类
class Simple { use ConstantTrait; const GROUP_TEST_ONEWORD = 1; const GROUP_TEST_TWO_WORDS = 2; const GROUP_TEST_COM_plex_LAbeL = 3; public function test() { return $this->constGroupTest(); } public function testStatic() { return static::constGroupTest(); } public function testSingleLabel() { return $this->constGroupTest(static::GROUP_TEST_TWO_WORDS); } public function testInvalidPrefix() { return $this->invalidGroupTest(); } public function testInvalidConstGroup() { return $this->constInvalidGroup(); } public function testInvalidConstValue() { return $this->constGroupTest(1000); } }
任何地方的使用
$simple = new Simple; // // will return CORRECT results // $simple->test(); // or $simple->testStatic(); // or Simple::testStatic(); // returns array(3) { [1]=> string(7) "Oneword" [2]=> string(10) "Two Words" [3]=> string(16) "COM plex LAbe L" } $simple->testSingleLabel(); // returns string(10) "Two Words" // // will throw an ERRORS // $simple->testInvalidPrefix(); // or $simple->testInvalidConstGroup(); // if no parent::__call and/or parent::__callStatic exists then // throws Error "Call to undefined method Simple::invalidGroupTest()" or "testInvalidConstGroup" // else // throws error from parent $simple->testInvalidConstValue(); // throws Error "Invalid argument '1000' while calling Simple::constGroupTest(1000)"
因此,正确的结果(不是单次调用)将是这样的
[ 1 => "Oneword", 2 => "Two Words", 3 => "COM plex LAbe L", ]
对于单标签调用 - Oneword
定制
更改常量获取器的前缀
在调用常量获取器之前定义
static::$constMagicGetterPrefix = 'get'; ... Simple::getGroupTest();
注意:尝试像下面那样重写静态属性将触发错误
protected static $constMagicGetterPrefix = 'get';
添加/重写常量标签以获取复杂的标签格式化
源类
class Simple { ... protected static $constMagicLabels = ['GroupTest' => [3 => 'COMP-lex-LaBEL', 0 => 'Extra label']]; ... // or ... protected static constMagicLabels() { return ['GroupTest' => [3 => 'COMP-lex-LaBEL', 0 => 'Extra label']]; } ... }
任何地方的使用
$simple->test(); // returns array(4) { [1]=> string(7) "Oneword" [2]=> string(10) "Two Words" [3]=> string(14) "COMP-lex-LaBEL" [0]=> string(11) "Extra label" }
因此,在这种情况下,正确的结果将是这样的
[ 1 => "Oneword", 2 => "Two Words", 3 => "COMP-lex-LaBEL", // was replaced 0 => "Extra label", // was added ]
注意:您可以在调用获取器之前通过设置更改标签定制属性/方法的名称
static::$constMagicCustomLabels = 'renamedConstMagicLabels';