按照手冊,trait_exists()
函數採用一個布爾作爲第二個參數,即涉及到自動加載;這似乎表明特質和自動加載不是兩個不兼容的想法。另外,如果你看看trait_exists()
函數的源代碼,你會看到一段由第二個參數調節的代碼,看起來和你在源代碼中看到的非常相似 - 代碼class_exists()
。
所以,我想說的第二個時間特徵和自動加載並不矛盾的想法;-)
(我沒有PHP 5.4安裝在我目前的電腦上,所以我不能由我自己測試 - 但,看代碼...)
[編輯] OK,我剛剛編譯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,受自動加載。
您不僅安裝了它,而且還測試並提供了非常好的答案。 +1優秀的回覆。謝謝! – MyStream
不客氣:-) *(我想安裝5.4,因爲很長一段時間 - 我終於做到了^^)* –