php estrict,php – 如何调用grandparent方法而不会出现E_STRICT错误?

有时我需要执行grandparent方法(也就是绕过父方法),我知道这是代码味道,但有时候我不能改变其他类(框架,库等).

在PHP中,我们可以通过以下方式实现:

call_user_func(array(get_parent_class(get_parent_class($childObject)), 'grandParentMethod'));

问题是,如果您启用了E_STRICT错误,您将收到如下错误:

严格的标准:非静态方法GrandParent :: grandParentMethod()不应该在…中静态调用

我发现只有一个解决方案(没有删除E_STRICT),它只是添加@来抑制错误.

但这真的很难看,有人知道更好的解决方案吗?

谢谢 !

PS:我无法实例化一个新对象,如:

$grandparent = get_parent_class(get_parent_class($son));

$gp= new $grandparent;

$gp->grandParentMethod

因为我需要在$son的上下文中调用我的祖父母方法.

解决方法:

例:

class Grandpa {

protected $age = 'very old';

public function sayMyAge() {

return 'sayMyAge() in Grandpa should be very old. ' .

'My age is: ' . $this->age;

}

}

class Pa extends Grandpa {

protected $age = 'less old';

public function sayMyAge() {

return 'sayMyAge() in Pa should be less old. ' .

'My age is: ' . $this->age;

}

}

class Son extends Pa {

protected $age = 'younger';

public function sayMyAge() {

return 'sayMyAge() in Son should be younger. ' .

'My age is: ' . $this->age;

}

}

$son = new Son();

$reflectionMethod = new ReflectionMethod(get_parent_class(get_parent_class($son)),

'sayMyAge');

echo $reflectionMethod->invoke($son);

// returns:

// sayMyAge() in Grandpa should be very old. My age is: younger

注意:调用的方法必须是公共的.

标签:php,inheritance

来源: https://codeday.me/bug/20191007/1869321.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值