2011-04-20 79 views
0

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

有没有什么办法可以从创建helper类实例的类的父类引用我的addError方法,直接从helper类自身的方法中?

例如

 
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') } 
    } 
    ... 
} 

〜或者〜

可能有人请提出一个更好的方法来组织我的系统,以更好地处理这种情况?

回答

2

2个简单的解决方案是:

Store中的辅助类的父类:

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

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

Othwerwise使addError功能的公共和静态的,所以你可以在辅助类调用它没有商店父类实例:

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

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

我喜欢你的第二个建议的整洁,所以我已经走了这一点。我知道必须有一个简单明了的方法才能做到这一点,非常感谢你! – Chris 2011-04-20 14:46:47

+0

大家好!实际上,使用'static'意味着我不能使用'$ this-> var'来访问类变量,我需要这样做,以便基类(以及随后的子类)“知道”何时出现错误消息显示!所以我已经转向你的第一个例子,一切都很好! – Chris 2011-04-20 15:10:24

0

从你的例子中,我会假设你的意思是baseview被普遍使用,所以“baseview :: addErro r('错误信息');“

但是从文中可以看出,可能存在不同的类别。在这种情况下,你将不得不在创建类的引用传递到帮手,就像这样:

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

... }

类助手{ 保护创作者$; ... 公共职能myFunction的($创造者,是$ var){

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

}

0

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

这里是 PDF所有程序员都应该至少读一次:Writing Testable Code

这是MISKO Hevery的博客(阿谷歌“干净代码”传道者)发现了一个PDF文件。

如果你喜欢的视频,您可以检查这些:Misko's conferences at Google

相关问题