你能克隆一个对象吗';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-

是否可以仅在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->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的问题就是假设父对象是一个对象。