我可以有条件地为我的班级添加一个功能吗?

时间:2016-01-08 12:54:30

标签: php class

在框架问题2答案中,主题是基本主题qa_html_theme_base的扩展。在这个例子中,我扩展了输出html的html函数。

class qa_html_theme extends qa_html_theme_base
    {
        function html(){
           //Theme goes here   
        }
    }

我希望能够快速打开和关闭我的主题以进行测试。是否可以有条件地扩展课程,我试过

class qa_html_theme extends qa_html_theme_base
    {
        if($debug){
            function html(){}
        }
    }

但它不起作用。

3 个答案:

答案 0 :(得分:1)

我不确定这是否可能,类声明中的这种语法是不正确的。如果是的话,我不确定我会推荐它。

但是如果你的函数覆盖了一个扩展类函数,你可以执行以下操作:

class qa_html_theme extends qa_html_theme_base
{
    function html(){
        global $debug; // added to maintain a correct syntax, but you could as well use $this->debug below, if the value comes from a class property.
        if( $debug ){
            // your debug code here
        }
        else {
            parent::html();
        } 
    }
}

答案 1 :(得分:0)

我能想到的唯一方法就是有条不紊地包含类文件,这是你所建议的(并且它最笨重)。所以创建两个类文件。我们会调用第一个theme_html.php,它包含您的html()功能。第二个是theme_no_html.php,它没有html()功能。这很笨重,因为你需要维护两个文件。

然后我们

if($debug) {
     include('theme_html.php');
} else {
     include('theme_no_html.php');
}
$class = new qa_html_theme();

答案 2 :(得分:0)

如果我的思想正确,

class qa_html_theme extends qa_html_theme_base
{
    protected $debug = 1; // or const DEBUG = 1;

    /**
     * Constructor
    */
    public function __construct()
    {
        if($this->debug){
            $this->html();
        }else{
          // do anything you want
        }
    }

    protected function html(){
       //Theme goes here   
    }
}