PHP无法访问受保护的属性错误。

45

我看不出这段代码有什么问题,但是我偶尔会在日志中看到上述异常。这是怎么回事?

PHP致命错误:无法访问受保护的属性Exception::$message,位于/web/index.php的第23行

在第23行我有以下代码:

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

105

使用$e->getMessage()而不是$e->message,因为message是一个受保护的属性 :)


1
在我的TYPO3 Extbase项目中,这个完美地运作了,除了我使用了$this->user->getUsergroup()。getter-setter原则——我开始理解了。 - Mateng
在我的异常中烦人地使用 $e->getMessage() 导致在我的 try catch 块中调用未定义的函数的错误 :/ - Douglas Gaskell

23

$message 是 Exception 类的一个受保护的成员,正如错误信息所述。你需要使用公共访问器 getMessage

$e->getMessage()

6

被声明为protected的成员只能被类自身以及继承和父类访问。

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

您可以在这里深入了解 属性可见性相关的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接