是否可以仅在PHP中克隆对象的父对象?我尝试过使用此代码,但会返回Fatal error: __clone method called on non-object
错误消息。
这是我的代码:
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
和Record extends Table
。 Table
类包含有关MySQL数据库表的信息,它拥有的字段,这些字段的默认值,主键,最重要的是,它包含三种方法(插入,删除,更新),但我们将这里只谈谈删除。这三种方法作为匿名函数存储在类中的受保护数组中。表类的delete方法,当从相应的表中删除某些内容时,告诉该怎么做。
例如,我们有以下三个mysql表: parent , children , grandchildren 。这些表按以下方式链接在一起: parent 表中的记录可以链接到 children 表中的多个记录,而子目录中的记录表可以链接到孙子表中的几个记录。
因此,在此示例中,父 MySQL表的Table
对象将告诉我们,当我们根据表的主键从此表中删除记录时,我们应该删除链接到此记录的 children 表中的每条记录。 children 表的删除方法说明了一些事情:当我们从表中删除记录时,我们应该删除 grandchildren 表中的每条记录,该记录链接到<刚刚删除了em> children 表。
当我在代码中初始化对象时,我将只初始化Record extends Table
个对象。第一次,Table
对象通过Record extends Table
对象初始化,它应该存储在Table
类的静态变量中,以备将来使用,所以当从表中删除某些东西时,我不必创建新记录,我只使用:Table::$tables['parent']->delete(5);
将删除该表中主键为5的记录,并删除需要删除的所有其他内容
我不知道这是否有意义(它可能是无关紧要的,因为英语不是我的母语,或者因为它在我身边的地方已经很晚了,也许有一个更容易和我的问题的清洁解决方案然后是我想象的那个)
答案 0 :(得分:1)
不,你不能(在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
而编写的部分可以简单地处理B
A
,因为B
从A
延伸。我的意思是这是继承的基本思想之一。