簡體   English   中英

在PHP中自動加載導入的名稱空間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM