我一直在使用PHP很長一段時間,但現在開始嘗試使用新的語言功能,如命名空間。我有一個關於自動加載的問題,我無法在我的網頁搜索中找到適當的答案。自動加載和命名空間
假設我有不同的命名空間中的類:
namespace foo\bar\baz;
class Quux
{
}
namespace fred\barney\wilma;
class Betty
{
}
然後假設我有這樣的假設,有一個1自動加載磁帶機:
function autoload ($className)
{
$className = str_replace ('\\', DIRECTORY_SEPERATOR, $className);
include ($className . 'php');
}
spl_autoload_register ('autoload');
是否充分:命名空間和目錄結構之間的一對一映射合格的命名空間在所有情況下都會傳遞給自動加載器,還是自動加載器需要考慮當前使用的名稱空間?
例如,如果我做到以下幾點:
$a = new \foo\bar\baz\Quux;
$b = new \fred\barney\wilma\Betty;
自動加載磁帶機應該可以正常工作。
但是,如果我做了以下事情呢?
use \foo\bar\baz as FBB;
$a = new Quux;
$b = new \fred\barney\wilma\Betty;
當試圖實例化一個新QUUX,會自動加載磁帶機仍然得到\foo\bar\baz\Quux
類名的說法?或者它應該得到FBB\Quux
,甚至只是Quux
?
如果是後者,是否可以通過使用__NAMESPACE__
或其他類似的機制來確定類應該位於我的自動裝載器中的命名空間?
那麼你試過的結果是什麼? – xdazz