マニュアルによると、このtrait_exists()
関数は、自動ロードに関連する2番目のパラメーターとしてブール値を取ります。これは、特性と自動ロードが2つの互換性のないアイデアではないことを示しているようです。
さらに、そのtrait_exists()
関数のソースコードを見ると、その2番目のパラメーターによって条件付けられたコードのセクションが表示されます。これは、のソースコードに表示されるものと非常によく似ていますclass_exists()
。
だから、私はもう一度、特性と自動ロードは互換性のないアイデアではないと言います;-)
(現在のコンピューターにPHP 5.4がインストールされていないため、自分でテストすることはできませんが、コードを確認してください...)
[編集] OK、現在の安定バージョンであるPHP5.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では、特性が自動読み込みの対象となることを意味します。