Ответ 1
В соответствии с руководством функция trait_exists()
принимает логический второй параметр, связанный с автозагрузкой; что, по-видимому, указывает на то, что черты и автозагрузка не являются двумя несовместимыми идеями.
Кроме того, если вы посмотрите на исходный код этой функции trait_exists()
, вы увидите раздел кода, обусловленного этим вторым параметром, который выглядит очень похоже на то, что вы можете видеть в исходном коде class_exists()
.
Итак, я бы сказал, второй раз, что черты и автозагрузка не являются несовместимыми идеями; -)
(У меня нет PHP 5.4, установленного на моем текущем компьютере, поэтому я не могу проверить сам, но, глядя на код...)
[edit] ОК, я только что скомпилировал PHP 5.4.3, текущую стабильную версию:
$ /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
Попробуйте следующую короткую часть кода, которая сохраняется как temp-2.php
, и пытается использовать признак, который не объявлен в этом файле:
spl_autoload_register(function ($name) {
echo "AUTOLOAD :: ";
var_dump($name);
});
class MyClass {
use MyTrait; // Let try to use a trait that is not declared in this file
}
$obj = new MyClass();
$obj->plop();
В принципе, если автозагрузка работает для признаков, "AUTOLOAD"
и должно отображаться имя моего признака.
Итак, попробуйте выполнить эту часть кода, и вот результат:
$ /usr/local/bin/php ./temp-2.php
AUTOLOAD :: string(7) "MyTrait"
Fatal error: Trait 'MyTrait' not found in /.../temp-2.php on line 13
Таким образом, функция автозагрузки (здесь, анонимная, но которая ничего не меняет) называется...
..., что означает, что признаки, с PHP 5.4.3, подлежат автозагрузке.