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'