Αναστοχασμός 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'