2011-11-03 20 views
0

我正在構建一個與API交互的類。假設API爲「foo」對象和「bar」對象提供了「get_something」方法。我想讓我的類暴露一個「get_something」方法,但能夠區分它是爲「foo」還是爲「bar」。PHP:同一類中有多個名稱空間?

對我來說什麼是一個很好的解決方案?我可以創建一個具有多個名稱空間的類嗎?這是個好主意嗎?

也許我應該有嵌套類?

回答

1

您應該將命名空間看作java中的包。一類屬於1包只

你雖然可以做的是有

namespace A_NS; 
class A { ...} 

namespace B_NS; 
class A extends \A_NS\A {}; 
在這種情況下,A類

下命名空間A_NS會存在,而另一個類A」將B_NS下存在,這將延長類\ NS_A \ A;

你可以檢查一個對象的類,或者在裏面實現一些標識符來區分。總體而言,我建議您的系統設計將每個類視爲僅屬於1名稱空間。

+0

我想讓一個類與API進行交互。我應該只使用一些策略性命名約定嗎?例如foo_get_something,bar_get_something等? – StackOverflowNewbie

+0

什麼是API?如果你有一個API的東西,你應該(理論上)有一個圖書館,它只與它交互。它應該是一些抽象。您的系統與庫交互,並且不知道API交互代碼。你的庫可以由一個類或幾個類組成(在同一個命名空間中)。這個想法是,圖書館可以用於不同的項目,是獨立於系統的其餘部分。這是在你的情況順便說一下 – galchen

+0

的總體推薦方法,你可以做get_something('foo',...) - 即爲類型添加一個標識符。更多的面向對象方法會說「foo」和「bar」對象的不同方法 – galchen

0

有兩種方法可以做到這一點,您可以使用一個接口(http://us3.php.net/interface),它確保實現接口的類將具有指定的方法。或者用抽象方法創建一個父類(http://us3.php.net/abstract)get_something將強制任何子類也擁有這個類。那麼你應該可以做一個get_class($ object)來確定哪個類被實例化了。

相關問題