【问题标题】:PHP: Class extends problem "Call to private method ... from context ..."PHP:类扩展问题“调用私有方法......从上下文......”
【发布时间】:2011-03-01 17:23:30
【问题描述】:

我在 WordPress 中有 3 个类(问题本身与它无关):

class WP_Widget

class Theme_Widget extends WP_Widget

class Specific_Widget extends Theme_Widget

基本上 Theme_Widget 包含一些基本 WP_Widget 的扩展功能。

在 Specific_Widget 内部我调用了 Theme_Widget 的方法之一:

class Specific_Widget {

    function __construct() {
         $this->some_method_that_belongs_to_Theme_Widget();
    }
}

当我实例化 Specific_Widget 时,PHP 抛出如下致命错误:

Fatal error: Call to private method Theme_Widget::some_method_that_belongs_to_Theme_Widget() from context 'Specific_Widget' in ...

您知道我该如何解决这个问题吗?这是我第一次从 PHP 收到此错误。会不会是 WordPress 本身派生的?

【问题讨论】:

    标签: wordpress class extends


    【解决方案1】:

    如果您希望子类能够使用它,您必须声明您的方法protected,而不是private

    【讨论】:

    • 所有方法都被声明为“public”,所以应该没有问题(但无论如何我尝试过 protected 也没有用)。
    • @sombe - 您尝试在 Theme_Widget 中调用的方法必须受到保护 - 不是私有的。
    • @jlindenbaum 我说我尝试了 public 和 protected 两种方法,但也没有用。
    • 你确定它们是公开的吗?该错误特别提到some_method_that_belongs_to_Theme_Widget 是私有的。
    • 我意识到这一点。我对 PHP 并不陌生,这就是为什么它看起来很奇怪。我已经涉足这些课程,似乎 WordPress 对此负责。为什么会发生这种情况超出了我的理解......
    【解决方案2】:

    如果您想从扩展类访问子函数而不在 URL 中传递受保护的函数,请使用 protected function

    例如

    protected function somemethod() { // your code goes here }
    

    【讨论】:

      猜你喜欢
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2013-07-02
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      相关资源
      最近更新 更多