我正在构建一个与API交互的类。假设API为“foo”对象和“bar”对象提供了“get_something”方法。我想让我的类暴露一个“get_something”方法,但能够区分它是为“foo”还是为“bar”。PHP:同一类中有多个名称空间?
对我来说什么是一个很好的解决方案?我可以创建一个具有多个名称空间的类吗?这是个好主意吗?
也许我应该有嵌套类?
我正在构建一个与API交互的类。假设API为“foo”对象和“bar”对象提供了“get_something”方法。我想让我的类暴露一个“get_something”方法,但能够区分它是为“foo”还是为“bar”。PHP:同一类中有多个名称空间?
对我来说什么是一个很好的解决方案?我可以创建一个具有多个名称空间的类吗?这是个好主意吗?
也许我应该有嵌套类?
您应该将命名空间看作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名称空间。
有两种方法可以做到这一点,您可以使用一个接口(http://us3.php.net/interface),它确保实现接口的类将具有指定的方法。或者用抽象方法创建一个父类(http://us3.php.net/abstract)get_something将强制任何子类也拥有这个类。那么你应该可以做一个get_class($ object)来确定哪个类被实例化了。
我想让一个类与API进行交互。我应该只使用一些策略性命名约定吗?例如foo_get_something,bar_get_something等? – StackOverflowNewbie
什么是API?如果你有一个API的东西,你应该(理论上)有一个图书馆,它只与它交互。它应该是一些抽象。您的系统与库交互,并且不知道API交互代码。你的库可以由一个类或几个类组成(在同一个命名空间中)。这个想法是,图书馆可以用于不同的项目,是独立于系统的其余部分。这是在你的情况顺便说一下 – galchen
的总体推荐方法,你可以做get_something('foo',...) - 即为类型添加一个标识符。更多的面向对象方法会说“foo”和“bar”对象的不同方法 – galchen