PHP - Как поймать ошибку "Попытка получить свойство не-объекта"
Я пытаюсь поймать ошибку "Попытка получить свойство не-объекта" с помощью инструкции try/catch, но она терпит неудачу, я все равно получаю ошибку PHP. Я использую как:
try{
$id = Model()->find('id=1')->id;
}catch(Exception $e){
echo 'failed';
}
Моя функция поиска возвращает объект (активная запись), и я могу получить доступ к столбцу id, как показано через функцию prop.
Однако это будет пустой объект, если AR не найден. Я думал, что попытка try поймает это. Работа для себя будет заключаться в использовании isset(). Но я смущен тем, почему оператор try не принимает и не улавливает эту ошибку.
Ответы
Ответ 1
try..catch
работает с throw
n исключениями. Ошибки не throw
n, и они не являются исключениями. Вы можете отключить ошибки, но, пожалуйста, не делайте этого. Вместо этого правильно проверьте, что вы получаете:
$result = Model()->find('id=1');
if ($result) {
$id = $result->id;
} else {
// handle this situation
}
Ответ 2
Модель должна иметь возможность генерировать исключение.
Здесь может выглядеть ваша модель:
class Model{
public function find($id){
$result = //do stuff to find by id
if (!isset($result)){
throw new Exception("No result was found for id:$id");
}
return $result
}
}
Затем вы должны использовать блок try/catch:
try{
$id = Model()->find('id=1')->id;
}catch(Exception $e){
echo 'failed';
}
Однако исключения следует отбрасывать только при "исключительных" обстоятельствах. Я не думаю, что использование исключений для прямого потока программы - это правильный путь.
Сказав, что если возврат NULL при попытке получить свойство ID является исключительной ситуацией, то исключения, безусловно, подходят.