我有 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
对象吗?
另外,上述方法可以吗?
答案 0 :(得分:2)
因为你不能在php中强制转换对象(有很多丑陋的黑客可以使用,但我会避免使用它们。)
相反,有两种方式:
User
实例返回新的Student
实例并传输所有数据User
实例实际上有第三种方式(我会使用的方式):不要这样做。
PHP不是DCI开发范例的语言。恕我直言这整个建筑毫无意义。 User
和Student
不可互换。
答案 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对象
如你所知,多态的工作颠倒了,在这种情况下,即使是对象构建也无济于事。