Skip to content
Advertisement

Is there a “nullsafe operator” in PHP?

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.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement