Как безопасно обрабатывать ошибки PHP: __toString () не должна вызывать исключение

На прошлой неделе мне нужно было поработать над старым проектом с использованием Symfony 1.4. Я решил установить composer, чтобы иметь возможность устанавливать множество библиотек PHP вместо того, чтобы полагаться на отдельные плагины Sf 1.4. Одна из библиотек, которая мне была нужна Kint, модный отладчик PHP для отображения некоторых данных некоторых строк в базе данных. Эти строки были занесены Doctrine 1, однако по какой-то причине я получаю постоянную ошибку, а именно то, что SomeTableClass выдает исключение «error: __toString () не должно вызывать исключение».

Ошибка, конечно, не в библиотеке Kint, а проблема с классами сущностей, которые я хотел отобразить. Кинт использует магию __toString метод для любого класса, который вы хотите отладить, однако класс вызывал исключение, так как свойство вообще не существовало, поэтому вам нужно будет добавить инструкцию try-catch для магического метода в классе, где у вас есть ошибка :

class YourClassThatThrowsAnException {
// ..
// Original Code of your class
// ..
public function __toString() {
try {
// Note that the property needs to exist
// on the class, or therefore the exception
// will be thrown
return (string) $this->getName();
} catch (Exception $exception) {
// Optionally you can var_dump the error message to see why the exception is being thrown !
var_dump($exception->getMessage());
return '';
}
}
}

Обратите внимание, что, как мы сказали в комментарии, вам нужно будет вернуть существующее свойство и всегда строковое значение, иначе будет выдано другое исключение. Кроме того, это довольно полезно, если вы уверены, что свойство существует, чтобы добавить var_dump строка в блоке catch, чтобы вы могли увидеть сообщение, сгенерированное PHP, чтобы увидеть, что не работает. Мы возвращаем пустую строку, чтобы переопределить ошибку, когда свойство не существует, так что я все равно смог сбросить его с помощью Kint.

Ссылка на основную публикацию