你能在php中克隆一个对象的父对象吗?

时间:2015-10-19 17:27:57

标签: php

是否可以仅在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();

我使用它的方式如下:
我们建议我上课:TableRecord extends TableTable类包含有关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的记录,并删除需要删除的所有其他内容

我不知道这是否有意义(它可能是无关紧要的,因为英语不是我的母语,或者因为它在我身边的地方已经很晚了,也许有一个更容易和我的问题的清洁解决方案然后是我想象的那个)

1 个答案:

答案 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,因为BA延伸。我的意思是这是继承的基本思想之一。