Php 让一个对象决定它的类
很抱歉,我想不出一个更具描述性的标题。我的问题如下。假设您有两个类A和B,并且您知道有时可能会发生一些代码试图实例化类型A的对象,而实际需要的是类型B的对象。关键是决定哪一个是正确对象的代码自然属于类A而不是客户机代码 在javascript中(好的,js没有类,但它清楚地表明了这一点),您只需Php 让一个对象决定它的类,php,design-patterns,instantiation,Php,Design Patterns,Instantiation,很抱歉,我想不出一个更具描述性的标题。我的问题如下。假设您有两个类A和B,并且您知道有时可能会发生一些代码试图实例化类型A的对象,而实际需要的是类型B的对象。关键是决定哪一个是正确对象的代码自然属于类A而不是客户机代码 在javascript中(好的,js没有类,但它清楚地表明了这一点),您只需 function A() { if(some_condition) { return new B(); } //else we proceed to custom
function A() {
if(some_condition) {
return new B();
}
//else we proceed to customize and return our object
}
我想在PHP中做一些类似的事情。我能想到的最好的办法是
class A {
private function __construct() {
//whatever you need to do
}
public static function getInstance() {
if(some_condition) {
return new B();
}
else {
return new A();
}
}
}
问题是,客户机代码必须始终知道A是特殊的,并且必须使用静态方法实例化对象
有没有一种方法可以将要无缝返回的对象类型的选择委托给代理?不幸的是,没有,我认为您能做的最好的事情是:
class Decider {
public static function decide() {
if(some_condition) {
return "A";
}
else {
return "B";
}
}
}
$new_class = Decider::decide();
$new_object = $new_class();
但是,这和你处理问题的方式没有什么不同。虽然我不认为这是一个无效的设计模式,但是我会把它留给一个外部类来做决定,而不是让类“A”或“B”类来做决定。理想情况下,类的封装方式应确保它们不需要其他类,除非它们是类本身的成员变量或出于函数目的传递到类中