Parent ::或$ this->

时间:2012-02-25 06:56:07

标签: php oop

我正在开始一个新项目,我不确定最好/正确的为什么要获得父母方法?

应该这样做

class ControllerForum extends ControllerAbstract
{
    public function __construct()
    {
        parent::__construct();
    }

    public function actionViewThread($threadName, (int) $threadId)
    {
        $threadModel = $this->getModel('ModelThread');
    }
}

或者这个原因

class ControllerForum extends ControllerAbstract
{
    public function __construct()
    {
        parent::__construct();
    }

    public function actionViewThread($threadName, (int) $threadId)
    {
        $threadModel = parent::getModel('ModelThread');
    }
}

谢谢。

2 个答案:

答案 0 :(得分:3)

他们做了两件不同的事情:

当您致电$this->method()时,您正在调用您自己的子类中定义的method()(在本例中为ControllerForum)。

当您致电parent::method()时,您正在调用父类(ControllerAbstract)中定义的那个。

因此,如果我们在ControllerAbstract和ControllerForum(override)中定义getModel,则调用其中一个或另一个将执行不同的代码。除非你需要特定的行为,否则我会使用继承的方法(第一种形式)。

编辑:@Chris它是继承,它意味着子类(扩展父类)将具有父类的方法和属性。当您使用$this->method()时不调用父方法时,可以调用从父类继承的当前类的方法。见PHP 5 inheritance

答案 1 :(得分:-1)

总是代码取决于需要

如果你能够创建类的对象,那么通常我们使用第一种方式

$threadModel = $this->getModel('ModelThread');

第二种方法是在我们想要调用没有对象的函数时使用

$threadModel = parent::getModel('ModelThread');

所以它基于需要

由于

相关问题