如何从现有父对象创建子对象

时间:2011-08-11 12:32:49

标签: php oop

我有 php

class User implements IUser
{
    public function __construct($i_objParent = NULL)
    {

    }
}

当我成功登录时,我创建了User类的对象。

还有另一个名为Student class的类,它扩展了User Class

class Student extends User
{
    public function __construct($i_objParent = NULL)
    {
        parent::construct($i_objParent);
    }
}

现在正如我所说,我已经有了User class的对象,我如何从现有的Student object构建User Class

我认为可以将现有的User class对象传递给子类的构造函数Student class对象吗?

另外,上述方法可以吗?

3 个答案:

答案 0 :(得分:2)

因为你不能在php中强制转换对象(有很多丑陋的黑客可以使用,但我会避免使用它们。)

相反,有两种方式:

  • 创建一个工厂类,它使User实例返回新的Student实例并传输所有数据
  • 使用Decorator模式,它将调用User实例
  • 上的方法

实际上有第三种方式(我会使用的方式):不要这样做。 PHP不是DCI开发范例的语言。恕我直言这整个建筑毫无意义。 UserStudent不可互换。

答案 1 :(得分:0)

一个扩展另一个类的类与它们之间的父/子关系没有任何关系。它是一种架构解决方案,允许您重复使用功能,节省复制代码。我不知道任何自动调用会获得扩展User类的对象。我会创建一个函数

public function getChild($type)
{
    switch($type)
    {
         case "user":
         return new Student();
         break;
         case "teacher":
         return new Teacher();
         break;
    }
}

答案 2 :(得分:0)

最好将所有类都抽象或抽象,以避免出现此类问题。继承不能应用于此设计,您应该将其更改为

1 - 使用User作为Student的属性而不是它的父级(可能最终使用Decorator模式) 2 - 将User定义为抽象类并从头开始创建Student对象

如你所知,多态的工作颠倒了,在这种情况下,即使是对象构建也无济于事。

Here is the same problem on java