如何从实例化类调用父方法?

时间:2011-04-20 14:16:40

标签: php model-view-controller class methods extension-methods

在我的项目中,我的所有视图类都是基本视图类的扩展,它处理视图的所有常见方面,包括错误消息。在其中一个视图扩展中,我创建了另一个'helper'类的实例,可能需要输出错误消息。

有没有办法可以直接从辅助类本身的方法中从创建辅助类实例的类的父级引用我的addError方法?

e.g。

class baseview {
    ...
    public function addError($message) {
        ...
    }
    ...
}

class pageview extends baseview {
    ...
    $helper = new helper();
   ...
}

class helper {
    ...
    public function myFunction($var) {
        if( $var ) { ... }
        else { theClassThatInstantiatedMe::addError('Error Message') }
    }
    ...
}

~OR~

有人可以建议一种更好的方法来构建我的系统以更好地处理这种情况吗?

3 个答案:

答案 0 :(得分:2)

2个简单的解决方案是:

将父类存储在辅助类中:

class pageview extends baseview {
    ...
    $helper = new helper($this);
   ...
}

class helper {
    function __construct($parent)
    {
        $this->_parent=$parent;
    }
    ...
    $this->_parent->addError("...");
}

Othwerwise使addError函数成为public和static,这样你就可以在helper类中调用它而不存储父类实例:

class baseview {
    ...
    static public function addError($message) {
        ...
    }
    ...
}

class helper{
     ...
     baseview::addError("...");
}

答案 1 :(得分:0)

从你的例子中,我认为你的意思是普遍使用baseview,所以“baseview :: addError('Error Message');”

但是从文中可以看出,可能会有不同的课程。在这种情况下,您将不得不将创建类的引用传递给帮助程序,如下所示:

class pageview extends baseview {
...
$helper = new helper($this);

... }

类助手{     受保护的$ creator;     ...     公共函数myFunction($ creator,$ var){

    $this->creator = $creator;
    if( $var ) { ... }
    else { $creator->addError('Error Message') }
}
...

}

答案 2 :(得分:0)

如果你想要干净的代码,你应该分开布线(对象创建)和逻辑。

以下是 THE pdf,所有程序员都应至少阅读一次:Writing Testable Code

这是在Misko Hevery的博客上发现的PDF格式(谷歌“清洁代码”传播者)。

如果您更喜欢视频,可以查看以下内容:Misko's conferences at Google