父方法的PHP代码使用返回语句

时间:2015-10-30 19:58:03

标签: php

我有BaseClass。我有方法BaseMethod,它有一些if..else结构。

我想在子方法中使用BaseMethod的if..else,以避免重复代码。

但是当我使用parent :: BaseMethod()时,我没有收到理想的结果,因为BaseMethod()的return不起作用。

换句话说,我想将这些功能链接在一起。如果父方法没有评估以便返回结果,我想继续使用子方法。

示例,我想要的:

class BaseClass
{
    public function BaseMethod($baseVariable)
    {
        if($baseVariable == 1) {
           return 'something'; // I want this work in my base method
        }
    }
}

class ChildClass extends BaseClass
{
    public function BaseMethod($baseVariable)
    {
        parent::BaseMethod($baseVariable);
        if($baseVariable == 3) {
           return 'one more something';
        }
    }
}
$a = new BaseClass();
$b = new ChildClass();
echo $a->baseMethod(1); // this is work
echo $b->baseMethod(1); // this is not work

请帮我完成这项任务。非常感谢您的帮助!

更新。我已编辑了我的代码,您可以根据自己的环境对其进行测试。

2 个答案:

答案 0 :(得分:2)

如果$baseVariable == 3然后返回一些内容,如果没有,则返回父方法:

class ChildClass extends BaseClass
{
    public function BaseMethod($baseVariable)
    {
        if($baseVariable == 3) {
           return 'one more something';
        } else {
           return parent::BaseMethod($baseVariable);
        }
    }
}

答案 1 :(得分:1)

不确定您要对此签名做些什么:public function method BaseMethod($baseVariable)。您是否认为method是一个关键词?您是否正在尝试扩展类似于某个类的功能?

这不是有效的PHP语法。以下编辑的代码“工作”:

class BaseClass
{
    public function baseMethod($baseVariable)
    {
        if($baseVariable == 1) {
           return 'something'; // I want this work in my base method
        } elseif (2==1) {
           return 'something else'; // This too
        }
        return null;
    }
}

class ChildClass extends BaseClass
{
    public function baseMethod($baseVariable)
    {
        $foo = parent::baseMethod($baseVariable);
        if (!is_null($foo)) return $foo;

        if($baseVariable == 3) {
           return 'one more something';
        } else {
           return 'one more something else';
        }
    }
}
$a = new BaseClass();
$b = new ChildClass();
echo $a->baseMethod(1); // this is work
echo $b->baseMethod(1); // this is not work, because "1" using in parent::baseMethod()

确定。查看更新的代码。很难理解您的要求。我想我现在明白了。