PHP не удается получить доступ к ошибке защищенного свойства

#php

#php

Вопрос:

Я не вижу в этом ничего плохого, но иногда я вижу вышеупомянутое исключение в журналах. Что не так?

PHP Фатальная ошибка: Не удается получить доступ к исключению защищенного свойства ::$message in /web/index.php в строке 23

В строке 23 у меня есть,

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

Ответ №1:

Используйте $e->getMessage() вместо $e->message , потому что message является защищенным свойством 🙂

Комментарии:

1. Это отлично работало в моем проекте TYPO3 Extbase, за исключением того, что я использовал $this->user->getUsergroup() . Принцип получения-установки — я начинаю это понимать.

2. Досадное использование $e->getMessage() в моем исключении приводит к ошибке о вызове неопределенной функции из моего блока try catch :/

Ответ №2:

$message является защищенным членом класса Exception, как указано в сообщении об ошибке. Вам нужен общедоступный инструмент доступа GetMessage:

 $e->getMessage()
  

Ответ №3:

Члены, объявленные защищенными, могут быть доступны только внутри самого класса, а также унаследованными и родительскими классами.

 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
  

Вы можете подробнее изучить видимость свойств здесь