Αναστοχασμός PHP

Nette\Utils\Reflection είναι μια στατική κλάση με χρήσιμες λειτουργίες για την αντανάκλαση της PHP. Σκοπός της είναι να διορθώσει ελαττώματα σε εγγενείς κλάσεις και να ενοποιήσει τη συμπεριφορά σε διαφορετικές εκδόσεις της PHP.

Εγκατάσταση:

composer require nette/utils

Όλα τα παραδείγματα προϋποθέτουν ότι έχει οριστεί το ακόλουθο ψευδώνυμο κλάσης:

use Nette\Utils\Reflection;

areCommentsAvailable(): bool

Βρίσκει αν η αντανάκλαση έχει πρόσβαση στα σχόλια του PHPdoc. Τα σχόλια μπορεί να μην είναι διαθέσιμα λόγω της κρυφής μνήμης κώδικα, δείτε για παράδειγμα την οδηγία opcache.save-comments.

expandClassName(string $name, ReflectionClass $context)string

Επεκτείνει το $name της κλάσης σε πλήρες όνομα στο πλαίσιο του $context, δηλαδή στο πλαίσιο του χώρου ονομάτων της και των καθορισμένων ψευδώνυμα. Έτσι, επιστρέφει το πώς θα καταλάβαινε ο αναλυτής της PHP το $name αν ήταν γραμμένο στο σώμα του $context.

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. Συνήθως, κάθε μέθοδος είναι η δική της δήλωση, αλλά το σώμα της μεθόδου μπορεί επίσης να βρίσκεται στο γνώρισμα και με διαφορετικό όνομα.

Επειδή η PHP δεν παρέχει αρκετές πληροφορίες για τον προσδιορισμό της πραγματικής δήλωσης, η Nette χρησιμοποιεί τις δικές της ευρετικές μεθόδους, οι οποίες θα πρέπει να είναι αξιόπιστες.

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. Η ιδιότητα μπορεί επίσης να δηλωθεί στο trait.

Επειδή η PHP δεν παρέχει αρκετές πληροφορίες για τον προσδιορισμό της πραγματικής δήλωσης, η Nette χρησιμοποιεί τις δικές της ευρετικές μεθόδους, οι οποίες δεν είναι αξιόπιστες.

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. Διαφορετικά, είναι το όνομα της κλάσης.

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

Χρησιμοποιήστε την Nette\Utils\Validator::isBuiltinType().

toString($reflection): string

Μετατρέπει μια αντανάκλαση σε μια συμβολοσειρά αναγνώσιμη από τον άνθρωπο.

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