PHP Yansıma (Reflection)

Nette\Utils\Reflection, PHP yansıması için yararlı fonksiyonlar içeren statik bir sınıftır. Görevi, yerel sınıfların eksikliklerini düzeltmek ve farklı PHP sürümleri arasında davranışı birleştirmektir.

Kurulum:

composer require nette/utils

Tüm örnekler, bir takma ad oluşturulduğunu varsayar:

use Nette\Utils\Reflection;

areCommentsAvailable(): bool

Yansımanın PHPdoc yorumlarına erişimi olup olmadığını kontrol eder. Yorumlar, opcode önbelleği nedeniyle kullanılamayabilir, örneğin opcache.save-comments direktifine bakın.

expandClassName (string $name, ReflectionClass $context)string

$name sınıf adını, $context sınıfının bağlamında, yani ad alanı ve tanımlanmış takma adlar bağlamında tam adına genişletir. Yani aslında, $name $context sınıfının gövdesinde yazılsaydı PHP ayrıştırıcısının onu nasıl anlayacağını söyler.

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 metodunun bildirimini içeren metodun yansımasını döndürür. Genellikle her metot kendi bildirimidir, ancak metodun gövdesi bir trait içinde ve farklı bir ad altında da bulunabilir.

PHP, gerçek bildirimin belirlenebileceği yeterli bilgi sağlamadığından, Nette güvenilir olması gereken kendi sezgisellerini 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 sınıfın veya trait'in yansımasını döndürür. Özellik bir trait içinde de bildirilebilir.

PHP, gerçek bildirimin belirlenebileceği yeterli bilgi sağlamadığından, Nette güvenilir olmayan kendi sezgisellerini 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 öğesinin yerleşik bir PHP türü olup olmadığını kontrol eder. Aksi takdirde, bir sınıf adıdır.

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

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

toString ($reflection): string

Yansımayı insanlar tarafından okunabilir bir karakter dizisine 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