0

在 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

只要我不需要在创建父级后获取子级,这应该可以工作。

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

4

1 回答 1

1

您真正要寻找的是遵守所谓的“工厂模式”的东西

你可以在这里找到更多细节

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

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

更多细节在这里

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

于 2013-07-04T13:47:21.103 回答