gpt4 book ai didi

php - 如何调用祖 parent 方法而不出现 E_STRICT 错误?

转载 作者:行者123 更新时间:2023-12-03 00:19:49 24 4
gpt4 key购买 nike

有时我需要执行祖 parent 方法(即绕过父方法),我知道这是代码味道,但有时我无法更改其他类(框架、库等)。

在 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 的上下文中调用我的祖 parent 方法。

最佳答案

您可以直接通过名称调用祖 parent (不需要反射,也不需要call_user_func)。

class Base {
protected function getFoo() {
return 'Base';
}
}

class Child extends Base {
protected function getFoo() {
return parent::getFoo() . ' Child';
}
}

class Grandchild extends Child {
protected function getFoo() {
return Base::getFoo() . ' Grandchild';
}
}

Base::getFoo 调用可能看起来像静态调用(由于冒号 :: 语法),但事实并非如此。就像 parent:: 也不是静态的一样。

从类内的继承链调用方法将正确绑定(bind) $this 值,将其作为常规方法调用,遵守可见性规则(例如 protected),并且不违反任何类型!

乍一看这可能有点奇怪,但是,这是在 PHP 中实现的方法。

关于php - 如何调用祖 parent 方法而不出现 E_STRICT 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com