- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有时我需要执行祖 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/
我实际上有兴趣确保我们的代码库没有错误,这些错误会被 PHP 的内置错误检查警告,但我想看看 E_STRICT 到底执行了什么。推而广之,PHP的“严格标准”是什么?我查看了但找不到完整的列表。 我从
自从将我的测试服务器更新到 PHP 5.3.3 (Debian Squeeze) 后,我遇到了有关 PHP 错误报告的奇怪行为。 我这样设置 error_reporting: error_report
是否可以更改我的 PHP 应用程序使用 include 或 require_once 包含的文件的错误报告级别(关闭 E_STRICT)? 我希望能够看到我的代码中出现的严格通知,但我使用的是 PEA
我需要关闭 E_STRICT。我的 php.ini 中有 error_reporting = E_ALL & ~E_STRICT 但它似乎被忽略了。我在我的代码中试过这个: ini_set('erro
看起来(PHP 5.3)如果你重写一个类方法, 可以你可以添加额外的参数,只要它们有默认值。 例如,考虑类: class test1 { public function stuff() {
线 $db =& JFactory::getDBO(); 用 E_STRICT 给我这个 Strict Standards: Only variables should be assigned by
我有一个需要严格标准〜E_STRICT的脚本,但是我不明白如何在PHP上严格标准。我有安装了WHM的VPS的centos 6.4 最佳答案 如果要重新报告所有错误,请使用error_reporting
有时我需要执行祖 parent 方法(即绕过父方法),我知道这是代码味道,但有时我无法更改其他类(框架、库等)。 在 PHP 中,我们可以通过以下方式做到这一点: call_user_func(arr
通常我使用 E_ALL 来查看 PHP 可能对我的代码说的任何内容,以尝试改进它。 我刚刚注意到一个错误常量 E_STRICT,但从未使用过或听说过它,这是一个用于开发的好设置吗?手册说: Run-t
E_ALL 等于 8191 (0001 1111 1111 1111) E_STRICT 等于 2048 (0000 1000 0000 0000) 使用按位或将它们组合起来: 1 1111 1111
如何告诉 PHPUnit 在运行测试时只忽略旧 PHP 代码抛出的特定警告? 比如如何忽略E_DEPRECATED和 E_STRICT但是让 PHPUnit 将剩余的警告转换为异常? 最佳答案 PHP
在 PHP 5.4 中,使用 E_STRICT 和 E_ALL 有什么区别? 两者一样吗? 最佳答案 在 PHP 5.4 中,使用 E_STRICT 和 E_ALL 有什么区别。 嗯: 5.4.0
我是一名优秀的程序员,十分优秀!