php oop - 将一个对象转换为它的一个子对象

时间:2013-07-04 13:35:34

标签: php oop

在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

这应该有效,因为我不需要在创建父项后获取子类。

有没有办法在创建对象后将其更改为子对象?也许还有另一种“更清洁”的方法来将新方法和参数加载到现有对象中?

1 个答案:

答案 0 :(得分:1)

你真正想要的东西是所谓的“工厂模式”

您可以找到更多详情HERE

基本上,您定义了一个“工厂”对象,其任务是根据指定的需求构建正确类型的对象(通常,您通过调用不同的方法来决定要构建哪个对象)。请注意这是一个过于宽泛的简化,我真的建议你阅读我链接你的资源。

此外,您可能想看看另一个类似的创作模式,“建模模式”,顾名思义,它的任务是创建新对象。

更多详情HERE

请注意:一旦发现设计模式,请不要敬畏。它们只是工具,而不是软件开发的全部和最终目标。基本上,做USE设计模式,不要滥用(或过度使用)设计模式!我们都去过那里并做到了。尽量不要关注我们:D