How to handle "Calling a member function on a non-object"

How do you guarantee that you don't get a “member function call for non-object” fatal?

Fox example, I often have something like this in my templates: (which I find very convenient and readable):

<?php echo $object->getRelatedObject()->getProperty()->formatProperty() ?>

However, this will only work if each method returns an object of the correct class. But it is not always the case. A linked object may not be in the database, so it returns null, and you encounter a fatal error. Then you go over and manually check the return values:

<?php if (is_object($object->getRelatedObject()) && is_object($object->getRelatedObject()->getProperty())):
  <?php echo $object->getRelatedObject()->getPreperty()->formatProperty() ?>
<?php endif; ?>

But this is not so readable. How do you solve this problem?

+3
source share
4 answers

method_exists, , .

:

method_exists($object->getRelatedObject(), 'getProperty');

/ , , . , NULL, NullObject, .

, $object formatProperty . $object . formatProperty relatedObject, .

+5

, .

echo $object->getRelatedObject()->getProperty()->formatProperty();

try/catch

+2
<?php
$relatedObject = $object->getRealtedObject();
if(is_object($relatedObject)){
    $property = $relatedObject->getProperty();
    if(is_object(property)){
    ....
    }
}
+1
source
<?php
$result="record not found";
if(is_object($object->getRelatedObject()) && 
   is_object($object->getRelatedObject()->getProperty()))
{
  $result=$object->getRelatedObject()->getPreperty()->formatProperty();
}
echo $result;
?>

it is more readable: p

0
source

Source: https://habr.com/ru/post/1780474/


All Articles