2011-08-29 47 views
6

我有幾個一般使用函數在靜態方法中並沒有在任何類中有意義。我想將它們封裝在一個名稱空間下,以免與全局作用域中定義的函數發生衝突。對於我的命名空間類,我遵循廣泛採用的模式,其中諸如\ My \ Namespaced \ MyClass的類存在於包含路徑上的My/Namespaced/MyClass.php中。PHP命名空間函數最佳實踐

是否應該放置名稱空間函數的最佳做法?現在我把它們放在同一個命名空間下的類的目錄下的「functions.php」中。例如\ My \ Namespaced \ myFunction存在於My/Namespaced/functions.php中。

此外,有沒有什麼辦法自動加載這些函數的方式與類自動加載相同?

回答

5

此外,有沒有什麼辦法自動加載這些函數的方式與類自動加載相同?

不爲全局函數,但如果...

是有地方命名空間功能的最佳做法應該放在哪裏?

我會考慮使用對象而不是「最佳實踐」,但是我們都知道這不是完全正確的。

沒有自動加載全局函數的功能,你可以將函數封裝成靜態函數類,然後自動加載器啓動。所以這可能是一個建議,但是你應該清楚這些靜態函數對整體設計的影響。

所以要說:如果你對全局函數沒問題,那麼你可能會對全局靜態類函數沒問題。如果你改變一個類的名字(比如使用任何全局函數名),它們會中斷,但是你創建了一些可以自動加載並且與你的文件命名方案兼容的東西。

編輯:當我寫全局,我的意思是完全合格的名稱的功能,那是一個開始\。見Name resolution rulesDocs

+0

這些都不是全局的,它使用PHP 5.3命名空間。 – igorw

+0

@igorw:你什麼意思?什麼不是全球?我只是不明白,隨意闡述。 – hakre

+0

也許我沒有得到'global'的意思。我只是說所涉及的函數不在全局名稱空間中。 – igorw

2

不幸的是,函數沒有自動加載(因爲PHP開發人員決定這麼做......),因此您必須考慮如何獲取函數文件。例如,你可以使用一個函數(比如importFunction($namespace);它只是將名字空間映射到文件名幷包含文件),或者你可以包含每個包含函數的文件(在啓動時等)。