#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
Вы можете подробнее изучить видимость свойств здесь