I am trying to catch 'Trying to get property of non-object' error with a try/catch statement but it is failing, I still get a PHP error. I am using as:
try{ $id = Model()->find('id=1')->id; }catch(Exception $e){ echo 'failed'; }
My find function returns an object (Active Record) and I can access the id column as shown via object prop.
However, it will be null object if AR is not found. I thought the try statement would catch this. A work around for myself would be to use an isset(). But I am confused as to why the try statement does not accept and catch this error.
try..catch
works on thrown exceptions. Errors are not exceptions. You can silence errors, but please don't do that. Instead, properly check what you're getting:
$result = Model()->find('id=1'); if ($result) { $id = $result->id; } else { // handle this situation }
The model needs to be able to throw an exception.
Here's what your model might look like:
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 } }
Then you would use your try/catch block:
try{ $id = Model()->find('id=1')->id; }catch(Exception $e){ echo 'failed'; }
However, exceptions should only be thrown under "exceptional" circumstances. I don't think using exceptions to direct program flow is the right way to go about it.
Having said that, if returning a NULL when you attempt to retrieve the ID property is an exceptional situation, then exceptions are certainly suitable.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With