spl_autoload_register()真的可以做到不同第三方類庫使用自己的自載入嗎?

來源:互聯網
上載者:User
namespace a1;
function a($name)
{
echo $name;
}
spl_autoload_register('a1\a');
namespace a2;
function a($name)
{
echo $name;
}
spl_autoload_register('a2\a');
new a; // 執行個體化a2\a,但是為什麼卻先觸發了a1\a,然後再觸發a2\a
// 我用檔案引用的方式也還是這樣,但是如果a1\a找到了類檔案,則不會在觸發a2\a了,註冊的載入函數“不屬於命名空間”,那麼怎麼能做到不同第三方類庫使用自己的註冊的自載入呢?

回複內容:

namespace a1;
function a($name)
{
echo $name;
}
spl_autoload_register('a1\a');
namespace a2;
function a($name)
{
echo $name;
}
spl_autoload_register('a2\a');
new a; // 執行個體化a2\a,但是為什麼卻先觸發了a1\a,然後再觸發a2\a
// 我用檔案引用的方式也還是這樣,但是如果a1\a找到了類檔案,則不會在觸發a2\a了,註冊的載入函數“不屬於命名空間”,那麼怎麼能做到不同第三方類庫使用自己的註冊的自載入呢?

每個庫忽略掉自己不能夠載入的類即可

真的…………

好吧,我只看了題主的標題。這會兒整理下題主的代碼,盡量細說一下……

php

問題 1:為啥先調 \spaceA\loadA ?

隨便哪個順序都沒啥影響吧?再說,按你傳入的順序調有啥不妥咩?

問題 2: 怎麼能做到不同第三方類庫使用自己的註冊的自載入呢?

不同類庫的類名不一樣就行了,擔心類名衝突的話,不是有命名空間咩?它實際就是類名的首碼,使用時把類名寫全就行了。比如:

phpnew \spaceA\Something()new \spaceB\Something()

問題 3: 效率低怎麼辦?

效率低也要看低在哪裡

  • 尋找類檔案的路徑太慢?
    可以提前建立索引,通常會提前建好類名(注意命名空間其實就是類名的首碼)到類定義檔案的映射,方便你通過完整的類名直接取到類定義的檔案路徑。或者像Java那樣規範好類的目錄,正如 fig 這個社區組織所整理的的 PSR-4 那樣。

  • 類載入函數調用的次數太多?
    每個類定義檔案只會載入一次,runtime找到類的定義後就不再調用你的"類載入函數"了。一般項目裡能引用多少三方庫?能註冊多少個載入函數?能有多少類檔案?萬一得用十萬百萬千萬來計數的話,回頭請給個基準測試資料過來摔在在下的臉上,順便也摔在php開發組的臉上,到時大家一起邊掐邊哭邊研究下下hiahiahia…………。

  • 預留問題(在下暫時想不出了……)

關於spl-autoload-register的使用,詳情請參考文檔 http://php.net/manual/zh/function.spl-autoload-register.php

我懂了,http://www.thinkphp.cn/document/474.html
spl_autoload_register() 會將一個函數註冊到 autoload 函數列表中,當出現未定義的類的時候,SPL [注] 會按照註冊的倒序逐個調用被註冊的 autoload 函數,這意味著你可以使用 spl_autoload_register() 註冊多個 autoload 函數.
逐個的調用被註冊的自動函數,這多麼的不理智啊,被註冊的自動函數應該“屬於某個命名空間”才好啊,項目的各個類庫還是存在很很小的耦合性的,萬一耦合,載入不該載入的那不就完了啊,真是的,我的理解對不對呢?

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.