簡體   English   中英

通過僅將文件放入PSR-4目錄來加載PHP類

[英]Loading PHP classes by just putting files into PSR-4 directory

在我當前的lib中,我有一些類帶有靜態代碼,這些類具有超出類定義的靜態代碼,當我瀏覽具有自動加載功能的index.php文件(將類文件正確放入PSR-4文件夾結構,並調用composer install時)時,希望執行composer install之前)。

這不是什么壞事。 例如,在我的自定義Error.php類中,我可以在該類之外調用set_error_handler函數,以便可以捕獲警告。 將該文件放入PSR-4自動加載程序可以減輕不必在index.php調用任何Error.php代碼來啟用此捕獲的Error.php 每個僅使用我的命名空間並自動加載我的庫的源都將被視為理所當然。

我試圖包括use \\MyNamespace\\Error; index.php文件中,但是不會自動執行Error類定義之外的Error.php的代碼。

僅當我在index.php文件(具有自動加載功能)中調用類方法時,才執行類外部的代碼。

能做到嗎? 謝謝你的時間。

use \\MyNamespace\\Error; 不會觸發自動加載,它只允許您在代碼中使用較短的類名new \\MyNamespace\\Error() new Error()而不是new \\MyNamespace\\Error() 如果要包含Error.php文件,則需要使用此類。 可能最安全的方法是使用class_exist()

class_exists(Error::class);

但老實說,您應該重新考慮您的設計,使用類聲明在文件中隱式注冊錯誤處理程序是針對PSR-1的 ,在大型項目中可能確實很煩人。

文件應該聲明符號(類,函數,常量等)或引起副作用(例如,生成輸出,更改.ini設置等),但不應兩者都做

https://www.php-fig.org/psr/psr-1/#23-side-effects

如果您創建用於注冊錯誤處理程序的單獨方法並在index.php顯式調用它,那么它的魔力就會減少:

Error::registerErrorHandler();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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