Can't catch symfony FatalErrorException
Use Throwable class instead Exception class:
try { $var = $object->getCollection()->first()->getItem()->getName();} catch(\Throwable $e) { $var = null; $msg = $e->getMessage();}
Since PHP 7.0 exceptions thrown from fatal and recoverable errors are instances of a new and separate exception class: Error
. This new Error
class implements Throwable
interface, which specifies methods nearly identical to those of Exception
. Because Throwable
is higher in hierarchy you can catch with it both, \Error and \Exception.
interface Throwable|- Exception implements Throwable |- ...|- Error implements Throwable |- TypeError extends Error |- ParseError extends Error |- ArithmeticError extends Error |- DivisionByZeroError extends ArithmeticError |- AssertionError extends Error
As you can see here, FatalErrorException extends ErrorException (PHP) that extends itself php Exception class.
Now that you have all this elements, you're ready for next step: as the name of exception says, this is a FatalError (a concept related to PHP and not with Symfony2; in that case they built a wrapper class for this error, maybe for interface purposes).
A PHP fatal error isn't a catchable one so is pretty useless to keep the code that could cause the FatalError, inside a try ... catch
block
You should check, as a common and good rule, whenever is possible for returned values before try to access them.
Update
Since I've seen an upvote to my answer after PHP7 was released, I would like to caveat that since PHP7 is possible to catch fatal errors so this answer is still valid but only for PHP versions < 7.
Ok. I've found a workaround. I use the property accessor component which throws simple exceptions, not fatal errors.
$pa = \Symfony\Component\PropertyAccess\PropertyAccess::createPropertyAccessor();try { $var = $pa->getValue($object, 'collection[0].item.name');} catch(\Exception $e) { $var = null;}