我在執行PHP命名空間相當混亂,尤其是當它涉及到別名 - 導入類。PHP名稱空間自動加載必須使用文件夾嗎?
我按照本教程教程:
- Leveraging PHP V5.3 namespaces for readable and maintainable code(唐Denoncourt; 2011年3月1日,爲IBM developerWorks)
但我不明白 - 當使用__autoload
,爲什麼我必須將別名類存儲在文件夾中,但是當__autoload
是而不是使用時,名稱空間中的別名就好了,如下所示,
<?php
namespace barbarian;
class Conan {
var $bodyBuild = "extremely muscular";
var $birthDate = 'before history';
var $skill = 'fighting';
}
namespace obrien;
class Conan {
var $bodyBuild = "very skinny";
var $birthDate = '1963';
var $skill = 'comedy';
}
use \barbarian\Conan as mother;
$conan = new mother();
var_dump($conan);
var_dump($conan->bodyBuild);
$conan = new \obrien\Conan();
var_dump($conan);
var_dump($conan->birthDate);
?>
雖然這個我會得到錯誤,如果我沒有在文件夾中存儲Conan.php
的barbarian
<?php
require_once "autoload.php";
use \barbarian\Conan as Cimmerian;
$conan = new Cimmerian();
var_dump($conan);
?>
錯誤消息,
警告:要求(野蠻人/柯南。 php):無法打開流:沒有這樣的 文件或目錄在C:\ wamp \ www \ test \ 2013 \ php \ namepsace \ autoload.php on line 12
的autoload.php:
<?php
function __autoload($classname) {
$classname = ltrim($classname, '\\');
$filename = '';
$namespace = '';
if ($lastnspos = strripos($classname, '\\')) {
$namespace = substr($classname, 0, $lastnspos);
$classname = substr($classname, $lastnspos + 1);
$filename = str_replace('\\', '/', $namespace) . '/';
}
$filename .= str_replace('_', '/', $classname) . '.php';
require $filename;
}
?>
它是一個必須存儲在文件夾中的別名類?當使用autoload
時,是否可以導入類而不將它們存儲在文件夾中?
感謝您的回答。現在我明白自動加載和別名文件夾的重要性。 – laukok