Nette Documentation Preview

syntax
PHP Reflection
**************

.[perex]
[api:Nette\Utils\Reflection], PHP reflection'ı için kullanışlı fonksiyonlar sunan statik bir sınıftır. Amacı, yerleşik reflection sınıflarının eksiklerini gidermek ve farklı PHP sürümlerindeki davranışı tek biçime getirmektir.


Kurulum:

```shell
composer require nette/utils
```

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

```php
use Nette\Utils\Reflection;
```


areCommentsAvailable(): bool .[method]
--------------------------------------

Reflection'ın PHPdoc yorumlarına erişip erişemediğini denetler. Yorumlar, opcode önbelleklemesi nedeniyle erişilemez olabilir; örneğin [opcache.save-comments|https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.save-comments] yönergesine bakın.


expandClassName(string $name, ReflectionClass $context): string .[method]
-------------------------------------------------------------------------

`$name` sınıf adını, `$context` sınıfının isim alanını ve tanımlı takma adlarını göz önünde bulundurarak o bağlamdaki tam nitelikli adına genişletir. Özünde, `$name` `$context` sınıfının gövdesinde yazılmış olsaydı PHP ayrıştırıcısının onu nasıl yorumlayacağını belirler.

```php
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]
------------------------------------------------------------------------------

`$method` metodunun asıl bildirimini içeren metodun reflection'ını döndürür. Genellikle bir metot kendi bildirimidir, ancak metot gövdesi bir trait'ten ve olasılıkla başka bir adla geliyor olabilir.

PHP, gerçek bildirimi güvenilir şekilde belirlemeye yetecek bilgi sunmadığından Nette kendi sezgisel yöntemini kullanır; bu yöntem **güvenilir olmalıdır**.

```php
trait DemoTrait
{
	function foo()
	{
	}
}


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


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


getParameterDefaultValue(\ReflectionParameter $param): mixed .[method]
----------------------------------------------------------------------

Bir fonksiyon ya da metot parametresinin varsayılan değerini döndürür. Yerleşik `ReflectionParameter::getDefaultValue()` metodunun aksine, varsayılan değer olarak kullanılan sabitleri ve sınıf sabitlerini de doğru şekilde çözer. Sabit çözülemezse `\ReflectionException` fırlatır.

```php
class DemoClass
{
	const DefaultValue = 123;
}

function demo($param = DemoClass::DefaultValue)
{
}

$param = new ReflectionParameter('demo', 'param');
echo Reflection::getParameterDefaultValue($param); // 123
```


getPropertyDeclaringClass(ReflectionProperty $prop): ReflectionClass .[method]
------------------------------------------------------------------------------

`$prop` özelliğinin bildirimini içeren sınıfın ya da trait'in reflection'ını döndürür. Özellik bir trait içinde bildirilmiş olabilir.

PHP, gerçek bildirimi güvenilir şekilde belirlemeye yetecek bilgi sunmadığından Nette kendi sezgisel yöntemini kullanır; bu yöntem tümüyle güvenilir **değildir**.

```php
trait DemoTrait
{
	public $foo;
}


class DemoClass
{
	use DemoTrait;
}

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


getUseStatements(ReflectionClass $class): array .[method]
---------------------------------------------------------

`$class` sınıfının tanımlandığı dosyadaki use deyimlerinden (takma adlardan) oluşan bir dizi döndürür. Anahtarlar takma adlar, değerler tam nitelikli sınıf adlarıdır. `tokenizer` PHP eklentisini gerektirir.

```php
namespace Foo;

use Nette\Utils\Strings;
use Nette\Utils\Arrays as Arr;

class DemoClass
{
}

$class = new ReflectionClass(Foo\DemoClass::class);
Reflection::getUseStatements($class);
// ['Strings' => 'Nette\Utils\Strings', 'Arr' => 'Nette\Utils\Arrays']
```


isBuiltinType(string $type): bool .[method deprecated]
------------------------------------------------------

`$type` değerinin PHP'nin yerleşik türlerinden biri olup olmadığını denetler. Değilse sınıf adı sayılır.

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

.[note]
[Nette\Utils\Validators::isBuiltinType() |validators#isBuiltinType()] kullanın.


toString($reflection): string .[method]
---------------------------------------

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

```php
$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'
```

PHP Reflection

Nette\Utils\Reflection, PHP reflection'ı için kullanışlı fonksiyonlar sunan statik bir sınıftır. Amacı, yerleşik reflection sınıflarının eksiklerini gidermek ve farklı PHP sürümlerindeki davranışı tek biçime getirmektir.

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

Reflection'ın PHPdoc yorumlarına erişip erişemediğini denetler. Yorumlar, opcode önbelleklemesi nedeniyle erişilemez olabilir; örneğin opcache.save-comments yönergesine bakın.

expandClassName(string $name, ReflectionClass $context)string

$name sınıf adını, $context sınıfının isim alanını ve tanımlı takma adlarını göz önünde bulundurarak o bağlamdaki tam nitelikli adına genişletir. Özünde, $name $context sınıfının gövdesinde yazılmış olsaydı PHP ayrıştırıcısının onu nasıl yorumlayacağını belirler.

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 asıl bildirimini içeren metodun reflection'ını döndürür. Genellikle bir metot kendi bildirimidir, ancak metot gövdesi bir trait'ten ve olasılıkla başka bir adla geliyor olabilir.

PHP, gerçek bildirimi güvenilir şekilde belirlemeye yetecek bilgi sunmadığından Nette kendi sezgisel yöntemini kullanır; bu yöntem güvenilir olmalıdır.

trait DemoTrait
{
	function foo()
	{
	}
}


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


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

getParameterDefaultValue(\ReflectionParameter $param)mixed

Bir fonksiyon ya da metot parametresinin varsayılan değerini döndürür. Yerleşik ReflectionParameter::getDefaultValue() metodunun aksine, varsayılan değer olarak kullanılan sabitleri ve sınıf sabitlerini de doğru şekilde çözer. Sabit çözülemezse \ReflectionException fırlatır.

class DemoClass
{
	const DefaultValue = 123;
}

function demo($param = DemoClass::DefaultValue)
{
}

$param = new ReflectionParameter('demo', 'param');
echo Reflection::getParameterDefaultValue($param); // 123

getPropertyDeclaringClass(ReflectionProperty $prop): ReflectionClass

$prop özelliğinin bildirimini içeren sınıfın ya da trait'in reflection'ını döndürür. Özellik bir trait içinde bildirilmiş olabilir.

PHP, gerçek bildirimi güvenilir şekilde belirlemeye yetecek bilgi sunmadığından Nette kendi sezgisel yöntemini kullanır; bu yöntem tümüyle güvenilir değildir.

trait DemoTrait
{
	public $foo;
}


class DemoClass
{
	use DemoTrait;
}

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

getUseStatements(ReflectionClass $class)array

$class sınıfının tanımlandığı dosyadaki use deyimlerinden (takma adlardan) oluşan bir dizi döndürür. Anahtarlar takma adlar, değerler tam nitelikli sınıf adlarıdır. tokenizer PHP eklentisini gerektirir.

namespace Foo;

use Nette\Utils\Strings;
use Nette\Utils\Arrays as Arr;

class DemoClass
{
}

$class = new ReflectionClass(Foo\DemoClass::class);
Reflection::getUseStatements($class);
// ['Strings' => 'Nette\Utils\Strings', 'Arr' => 'Nette\Utils\Arrays']

isBuiltinType(string $type)bool

$type değerinin PHP'nin yerleşik türlerinden biri olup olmadığını denetler. Değilse sınıf adı sayılır.

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

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

toString($reflection): string

Bir reflection nesnesini 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'