nette/reflection

该包已 弃用 并不再维护。未建议替代包。

Nette 反射:docblock 注释解析器和常用反射类

v2.4.2 2017-07-11 19:28 UTC

This package is auto-updated.

Last update: 2020-01-20 23:34:19 UTC


README

Downloads this Month Build Status Coverage Status Latest Stable Version License

使用 Composer 安装它

composer require nette/reflection

最新稳定版需要 PHP 版本 5.6 或更高版本(兼容 PHP 7.0 和 7.1)。

如果您喜欢 Nette,请现在捐款。谢谢您!

如果您需要查找任何类的所有信息,反射是正确工具。您可以轻松找出任何类有哪些方法,这些方法接受哪些参数等。

// getting PDO class reflection
$classReflection = new Nette\Reflection\ClassType('PDO');

// getting PDO::query method reflection
$methodReflection = new Nette\Reflection\Method('PDO', 'query');

注释

反射与注释有很大关联。注释写入到 phpDoc 注释中(两个开头的星号是必须的!)并从 @ 开始。您可以注释类、变量和方法

/**
 * @author John Doe
 * @author Tomas Marny
 * @secured
 */
class FooClass
{
	/** @Persistent */
	public $foo;

	/** @User(loggedIn, role=Admin) */
	public function bar() {}
}

代码中有这些注释

  • @author John Doe - 字符串,包含文本值 'John Doe'
  • @Persistent - 布尔值,其存在表示 true
  • @User(loggedIn, role=Admin) - 包含关联数组 array('loggedIn', 'role' => 'Admin')

可以通过 hasAnnotation() 方法检查类注释的存在

$fooReflection = new Nette\Reflection\ClassType('FooClass');
$fooReflection->hasAnnotation('author'); // returns true
$fooReflection->hasAnnotation('copyright'); // returns false

可以通过 getAnnotation() 获取值

$fooReflection->getAnnotation('author'); // returns string 'Tomas Marny'

$fooReflection->getMethod('bar')->getAnnotation('User');
// returns array('loggedIn', 'role' => 'Admin')

.[注意] 后一个定义会覆盖前一个定义,因此您总是得到最后一个。

可以通过 getAnnotations() 获取所有注释

array(3) {
	"author" => array(2) {
		0 => string(8) "John Doe"
		1 => string(11) "Tomas Marny"
	}
	"secured" => array(1) {
		0 => bool(true)
	}
}