PHP Yansıması

Nette\Utils\Reflection PHP yansıması için yararlı işlevler içeren statik bir sınıftır. Amacı, yerel sınıflardaki kusurları düzeltmek ve PHP'nin farklı sürümlerindeki davranışları birleştirmektir.

Kurulum:

composer require nette/utils

Tüm örnekler aşağıdaki sınıf takma adının tanımlandığını varsayar:

use Nette\Utils\Reflection;

areCommentsAvailable(): bool

Yansımanın PHPdoc yorumlarına erişimi olup olmadığını bulur. Opcode önbelleği nedeniyle yorumlar mevcut olmayabilir, örneğin opcache.save-comments yönergesine bakınız.

expandClassName (string $name, ReflectionClass $context)string

Sınıfın $name adresini $context bağlamında, yani isim alanı ve tanımlı takma adları bağlamında tam isme genişletir. Böylece, $context gövdesinde yazılmış olsaydı PHP çözümleyicisinin $name 'u nasıl anlayacağını döndürür.

namespace Foo;
use Bar;

class DemoClass
{
	// new Bar, new Baz
}

$context = new ReflectionClass(Foo\DemoClass::class);
Reflection::expandClassName('Bar', $context); // 'Bar'
Reflection::expandClassName('Baz', $context); // 'Foo\Baz'

getMethodDeclaringMethod (ReflectionMethod $method): ReflectionMethod

$method bildirimini içeren bir yöntemin yansımasını döndürür. Genellikle, her yöntem kendi bildirimidir, ancak yöntemin gövdesi trait içinde ve farklı bir ad altında da olabilir.

PHP gerçek bildirimi belirlemek için yeterli bilgi sağlamadığından, Nette güvenilir olması gereken kendi sezgisel yöntemlerini kullanır.

trait DemoTrait
{
	function foo()
	{
	}
}


class DemoClass
{
	use DemoTrait {
		DemoTrait::foo as foo2;
	}
}


$method = new ReflectionMethod('DemoClass::foo2');
Reflection::getMethodDeclaringMethod($method); // ReflectionMethod('DemoTrait::foo')

getPropertyDeclaringClass (ReflectionProperty $prop): ReflectionClass

$prop özelliğinin bildirimini içeren bir sınıf veya özelliğin yansımasını döndürür. Özellik, özellik içinde de bildirilebilir.

PHP gerçek bildirimi belirlemek için yeterli bilgi sağlamadığından, Nette güvenilir olmayan kendi sezgisel yöntemlerini kullanır.

trait DemoTrait
{
	public $foo;
}


class DemoClass
{
	use DemoTrait;
}

$prop = new ReflectionProperty(DemoClass::class, 'foo');
Reflection::getPropertyDeclaringClass($prop); // ReflectionClass('DemoTrait')

isBuiltinType (string $type)bool

$type PHP yerleşik türü olup olmadığını belirler. Aksi takdirde, sınıf adıdır.

Reflection::isBuiltinType('string'); // true
Reflection::isBuiltinType('Foo');    // false

Nette\Utils\Validator::isBuiltinType() işlevini kullanın.

toString ($reflection): string

Bir yansımayı insan tarafından okunabilir bir dizeye dönüştürür.

$func = new ReflectionFunction('func');
echo Reflection::toString($func); // 'func()'

$class = new ReflectionClass('DemoClass');
echo Reflection::toString($class); // 'DemoClass'

$method = new ReflectionMethod('DemoClass', 'foo');
echo Reflection::toString($method); // 'DemoClass::foo()'

$param = new ReflectionParameter(['DemoClass', 'foo'], 'param');
echo Reflection::toString($param); // '$param in DemoClass::foo()'

$prop = new ReflectionProperty('DemoClass', 'foo');
echo Reflection::toString($prop); // 'DemoClass::$foo'
versiyon: 4.0