你能克隆一个对象吗';php中的父对象是什么?
是否可以仅在PHP中克隆对象的父对象?我尝试使用此代码,但它返回了一个你能克隆一个对象吗';php中的父对象是什么?,php,Php,是否可以仅在PHP中克隆对象的父对象?我尝试使用此代码,但它返回了一个致命错误:\在非对象上调用的克隆方法错误消息 这是我的密码: class A { public $val1=1; public $val2=2; } class B extends A { public $val3=3; public function getParent() { return clone parent; } } $B=new B(); $A=$B-
致命错误:\在非对象上调用的克隆方法
错误消息
这是我的密码:
class A {
public $val1=1;
public $val2=2;
}
class B extends A {
public $val3=3;
public function getParent() {
return clone parent;
}
}
$B=new B();
$A=$B->getParent();
我想用的方法如下:让我们建议我必须使用类:
表
和记录扩展表
。Table
类包含有关MySQL数据库表的信息、它拥有的字段、这些字段的默认值、主键,最重要的是,它包含三种方法(insert、delete、update),但我们在这里只讨论delete。这三个方法作为匿名函数存储在类内受保护的数组中。table类的delete方法告诉我们在从相应的表中删除某些内容时要做什么
例如,我们有以下三个mysql表:父表、子表、孙子表。这些表通过以下方式链接在一起:父表中的一条记录可以链接到子表中的多条记录,而子表中的一条记录可以链接到孙表中的多条记录
因此在本例中,父MySQL表的Table
对象会告诉我们,当我们从该表中删除记录时,基于该表的主键,我们应该从链接到此记录的子表中删除所有记录。children表的delete方法说明了一些类似的情况:当我们从表中删除一条记录时,我们应该删除孙子表中的每条记录,孙子表链接到刚才删除的children表
当我在代码中初始化对象时,我将只初始化Record extends Table
对象。第一次,一个表
对象是通过记录扩展表
对象初始化的,它应该存储在表
类的一个静态变量中,以备将来使用,所以当从表中删除某个内容时,我不必创建新记录,我只需使用:表::$tables['parent']->delete(5)
将从主键为5的表中删除记录,并将删除需要删除的所有其他内容
我不知道这是否有任何意义(它可能是不连贯的,因为英语不是我的母语,也可能是因为它在我这一边已经很晚了,也许有一个比我想象的更简单更干净的解决方案)不,你不能(在PHP中)。在这种情况下,正确的方法是:
class B extends A {
public $val3=3;
public function toA() {
$a = new A();
// Note: If $this->val is an object value you need to
// use $a->val = clone $this->val;
$a->val1 = $this->val1;
$a->val2 = $this->val2;
return $a;
}
}
然而,一个合适的OOP设计不应该需要这样的方法。编写用于处理
A
的部分可以像处理A
一样简单地处理B
,因为B
扩展自A
。我的意思是,这是继承的基本思想之一。这毫无意义,因为父类
不是对象,而是对父类的引用。和类无法克隆。返回新的父类代码>@abracadver几乎不会返回克隆,是吗?它不是一个对象,所以你如何克隆它<代码>返回克隆新父级代码>@Aba,这更有意义。OPs的问题就是假设父对象是一个对象。