我們最近使用OO重寫了我們的PHP應用程序的模型代碼。我們已經完成了類,並且我們包含了名稱空間(以Project \ Level1 \ Level2的形式或其他形式)。由於這是一個已經建好的應用程序,因此有很多類。我們使用自動加載器,以方便加載類,這非常棒。但是這裏是麻煩來的地方。在每個頁面上使用spl_autoload而不使用關鍵字?
我們可能有300頁散佈在整個應用程序中,並且它們都需要一個PHP文件(一種引導腳本)。自引導程序腳本在該引導程序文件中是必需的。
現在,我們大部分的頁面將使用至少一個,但可能會有很多類。我們知道,我們這裏有兩種選擇:
//either call the classes using qualified names
$person = new Project\Person;
//or include the "use" keyword on every page, so we can alias the classes for ease of use
use Project\Person as Person;
$person = new Person;
但麻煩的是,我們實在不好意思要做到這一點在我們的應用程序的每一個頁面上:
require_once('../php/bootstrap.php');
use Project\Person\ as Person,
Project\Address\ as Address,
Project\Group\ as Group
Project\CustomField\ as CustomField;
$person = new Person;
$address = new Address;
我們盡力了,對於包括引導程序文件中所有類的use關鍵字,但根據PHP手冊,「導入規則是基於每個文件的基礎,這意味着包含的文件不會繼承父文件的導入規則。」
在我們的應用程序的每個頁面中包含這些龐大的使用語句似乎是創造了更多的麻煩而不是它的價值。如果我們在一個頁面上使用15個課程呢?那麼使用聲明將是巨大的。
我的問題是這樣的:它太麻煩了嗎?我們在使用名稱空間方面是否正確,還是它在PHP中不是很有用?現在知道我們正在努力做什麼,我們做對了嗎?有什麼我們失蹤?我們是否應該始終用完全合格的名稱來調用類?
(這是我的計算器上的第一個問題,所以請讓我知道,如果我需要與我未來的問題不同的或更好的做任何事情)
也許你可以看看Zend Framework命名空間類的方式嗎? http://framework.zend.com/manual/en/zend.loader.autoloader.html –
+1好問題:) –
@NickCaballero,感謝您的建議。我們在重寫時看到了Zend,但決定不遵循他們的確切方法。用他們的下劃線解決方案,它實質上使每個班級名稱成爲完全合格的名稱,這非常繁瑣。但我想他們可能會這樣做,以通過這個愚蠢的問題與PHP。 :) –