在 PHP 中,一个对象是否有可能将自己转换为他的子类之一。
例子
class Children1 extends Parent {
// the children
}
class Parent {
public function loadChildConfiguration($type){
select($type){
case 1: self::MAGICALLY_TRANSFORM_INTO(Children1); break;
case 2: self::MAGICALLY_TRANSFORM_INTO(Children2); break;
// etc...
}
}
}
$foo = new Parent(); // foo is a Parent
$foo->loadChildConfiguration(1); // foo is now a Children1
现在我唯一的想法是在父类中创建一个静态类作为新的构造函数
class Parent {
public static constructByType($type){
select($type){
case 1: $class = Children1; break;
case 2: $class = Children2; break;
// etc...
}
return new $class;
}
}
$bar = Parent::constructByType(1); // bar is a Children1
只要我不需要在创建父级后获取子级,这应该可以工作。
有没有办法在创建对象后将其更改为子对象?也许还有另一种“更清洁”的方式将新方法和参数加载到现有对象?