【问题标题】:PHP cannot access protected property errorPHP 无法访问受保护的属性错误
【发布时间】:2011-06-10 13:36:17
【问题描述】:

我看不出有什么问题,但我偶尔会在日志中看到上述异常。怎么了?

PHP 致命错误:无法访问受保护的属性 Exception::$message in /web/index.php on line 23

在第 23 行我有,

echo '<?xml version=\'1.0\'?><error-response status="error">
<message><![CDATA['.$e->message.']]></message>
</error-response>';

【问题讨论】:

    标签: php


    【解决方案1】:

    使用$e-&gt;getMessage() 而不是$e-&gt;message,因为消息是受保护的属性:)

    【讨论】:

    • 感谢您的快速回复。我会试试这个
    • 这在我的 TYPO3 Extbase 项目中运行良好,但我使用了$this-&gt;user-&gt;getUsergroup()。 getter-setter 原则——我开始明白了。
    • 在我的异常中使用 $e-&gt;getMessage() 会导致从我的 try catch 块中调用未定义函数的错误:/
    【解决方案2】:

    声明为受保护的成员只能在类本身内以及被继承的类和父类访问。

    class MyClass {
        public $public = 'Public';
        protected $protected = 'Protected';
        private $private = 'Private';
    
        function printHello()
        {
            echo $this->public;
            echo $this->protected;
            echo $this->private;
        }
    }
    
    $obj = new MyClass();
    echo $obj->public; // Works
    echo $obj->protected; // Fatal Error
    echo $obj->private; // Fatal Error
    $obj->printHello(); // Shows Public, Protected and Private
    

    您可以深入了解属性可见性 here

    【讨论】:

      【解决方案3】:

      $message 是类 Exception 的 protected 成员,如错误消息所述。你想要公共访问者getMessage:

      $e->getMessage()
      

      【讨论】:

      • 感谢您的快速回复。我会试试这个。
      猜你喜欢
      • 2012-12-28
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2013-06-16
      • 2020-01-20
      • 1970-01-01
      相关资源
      最近更新 更多