根据手册,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's 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 中会自动加载。