我有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
请帮我完成这项任务。非常感谢您的帮助!
更新。我已编辑了我的代码,您可以根据自己的环境对其进行测试。
答案 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()
确定。查看更新的代码。很难理解您的要求。我想我现在明白了。