Według instrukcji, funkcja trait_exists()
przyjmuje wartość logiczną jako drugi parametr, który jest związany z autoloading; co zdaje się wskazywać, że cechy i autoload nie są dwoma sprzecznymi ideami.
Ponadto, jeśli spojrzysz na kod źródłowy tej funkcji trait_exists()
, zobaczysz sekcję kodu, uwarunkowaną tym drugim parametrem, która wygląda dość podobnie do tego, co widać w źródle kod class_exists()
.
Tak, powiedziałbym, że po raz drugi i autoload cechy nie są niezgodne pomysły ;-)
(nie zostały zainstalowane PHP 5.4 na mojego obecnego komputera, więc nie mogę sprawdzić samemu - ale , patrząc na kod ...)
[edytuj] OK, właśnie opracowywane PHP 5.4.3, obecna stabilna wersja:
$ /usr/local/bin/php --version
PHP 5.4.3 (cli) (built: May 17 2012 21:11:42)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Spróbujmy następujący krótki fragment kodu, który jest zapisany jako temp-2.php
i próbuje użyć cechę, że nie jest zadeklarowana w tym pliku:
spl_autoload_register(function ($name) {
echo "AUTOLOAD :: ";
var_dump($name);
});
class MyClass {
use MyTrait; // Let's try to use a trait that is not declared in this file
}
$obj = new MyClass();
$obj->plop();
Zasadniczo, jeśli autoloading pracuje dla cech , "AUTOLOAD"
, a nazwa mojej cechy powinna być wyświetlona.
Więc spróbujmy wykonujący tę część kodu - i tu jest wynikiem uzyskać:
$ /usr/local/bin/php ./temp-2.php
AUTOLOAD :: string(7) "MyTrait"
Fatal error: Trait 'MyTrait' not found in /.../temp-2.php on line 13
Więc funkcja autoloading (tutaj anonimowy jeden - ale to nie zmienia rzecz) jest nazywane ...
... co oznacza, że cechy są, w PHP 5.4.3, podlegają automatycznemu ładowaniu.
Nie tylko zainstalowałeś go, ale również przetestowałeś i dostarczyłeś bardzo dobrą odpowiedź. +1 doskonała odpowiedź. Dziękuję Ci! – MyStream
Nie ma za co :-) * (Chciałem zainstalować 5.4 od dłuższego czasu - w końcu to zrobiłem ^^) * –