[英]Autoload imported namespaces in PHP
我正在嘗試編寫一個自動加載器以支持導入的名稱空間。 我的目錄結構如下所示(列出了類文件):
/includes
/php
config.php
Shapes.php
Animals.php
/PetsModule
/classes
Cat.php
Dog.php
pcontroller1.php
pcontroller2.php
/MathModule
/classes
Triangle.php
Square.php
mcontroller1.php
mcontroller2.php
我所有的控制器都包含config.php文件,其中包含我的自動加載器代碼:
<?php
spl_autoload_register(function($fqClassName) {
$fqClassName = ltrim($fqClassName, '\\');
$lastSlash = strrpos($fqClassName, '\\');
if($lastSlash) {
// The class is in a namespace
require '/' . str_replace('\\', '/', substr($fqClassName, 0, $lastSlash)) . '/classes/' . substr($fqClassName, $lastSlash + 1) . '.php';
} else {
// The class is global
require "/includes/php/$fqClassName.php";
}
}, true);
現在,這對於所有基本情況都可以正常工作,但是在您開始導入名稱空間時會失敗。 例如:
<?php
namespace MathModule;
use PetsModule;
$t = new Triangle(60, 60, 60); // works fine
$fluffy = new Cat("Fluffy"); // fails
傳遞給自動加載器功能的標准類名稱是MathModule\\Cat
,這是一個合理的假設。
有沒有辦法使自動加載器與導入的名稱空間一起使用? 我猜應該有一種方法,因為我的自動裝帶器與PSR-0非常相似。
自動加載無關緊要。
要使用new Cat("Fluffy")
您應該編寫use PetsModule\\Cat;
或use PetsModule\\Cat as Cat;
http://www.php.net/manual/zh/language.namespaces.importing.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.