Is there any way to write the following statement using some kind of safe navigation operator?
echo $data->getMyObject() != null ? $data->getMyObject()->getName() : '';
So that it looks like this:
echo $data->getMyObject()?->getName();
Advertisement
Answer
From PHP 8, you are able to use the null safe operator which combined with the null coalescing operator allows you to write code like:
echo $data->getMyObject()?->getName() ?? '';
By using ?->
instead of ->
the chain of operators is terminated and the result will be null.
The operators that “look inside an object” are considered part of the chain.
- Array access ([])
- Property access (->)
- Nullsafe property access (?->)
- Static property access (::)
- Method call (->)
- Nullsafe method call (?->)
- Static method call (::)
e.g. for the code:
$string = $data?->getObject()->getName() . " after";
if $data is null, that code would be equivalent to:
$string = null . " after";
As the string concatenation operator is not part of the ‘chain’ and so isn’t short-circuited.