2011-11-03 65 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)来确定哪个类被实例化了。

相关问题