PHP OOP如何从对象本身调用对象的父方法?

时间:2013-08-28 17:34:31

标签: php oop

在PHP OOP中,可以通过外部引用该对象来调用对象的父方法吗?

Class ObjectOne {
    protected function method() {
        // Does something simple
    }
}

Class ObjectTwo extends ObjectOne {
    protected function method() {
        $temp = clone $this;
        $this->change_stuff();
        if(parent::method()) {
            // Do more stuff here
            $temp->method();
            // This will call this method, not the parent's method.
        }
    }

    protected function change_stuff() {
        // Change this object's stuff
    }
}

我无法调用parent :: method(),因为这会导致当前对象执行它的方法。 我想改变$ temp。

解决

我通过编写另一个从类中调用parent::update()方法的函数来解决它:

Class ObjectOne {
    protected function method() {
        // Does something simple
    }
}

Class ObjectTwo extends ObjectOne {
    protected function method() {
        $temp = clone $this;
        $this->change_stuff();
        if(parent::method()) {
            // Do more stuff here
            $temp->update_parent();
            // This will call this method, not the parent's method.
        }
    }

    protected function change_stuff() {
        // Change this object's stuff
    }

    protected function update_parent() {
        return parent::update();
    }
}

2 个答案:

答案 0 :(得分:4)

$temp->parent::update()没有意义。

为什么不再parent::update()而不是$temp->parent::update();

您有两个名为update()的方法如果您调用$this->update(),它将从调用的对象中调用该方法。 你可以做到

parent::update();

这将在update()

中运行ObjectOne方法

答案 1 :(得分:0)

您可以使用以下语法

调用任何受保护和公共父方法
parent::method_name();

在您的情况下,这将是:     父::更新();