你如何确保你没有得到"对非对象的成员函数的调用"致命?
Fox的例子,我经常在我的模板中有这样的东西:(我发现它非常方便和可读):
<?php echo $object->getRelatedObject()->getProperty()->formatProperty() ?>
Run Code Online (Sandbox Code Playgroud)
但是,仅当每个方法返回正确类的对象时,这才有效.但情况并非总是如此.相关对象可能不存在于数据库中,因此它返回null并且您将面临致命错误.然后你去手动检查返回值:
<?php if (is_object($object->getRelatedObject()) && is_object($object->getRelatedObject()->getProperty())):
<?php echo $object->getRelatedObject()->getPreperty()->formatProperty() ?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)
但这不再那么可读了.你是如何解决这个问题的?
您可以使用method_exists以确保对象或类中存在特定方法.
例:
method_exists($object->getRelatedObject(), 'getProperty');
Run Code Online (Sandbox Code Playgroud)
您还可以向返回的relatedObjects和/或属性对象添加接口,以确保它们具有所需的方法.对于通常会返回调用的情况,请将其NULL更改为NullObject具有此方法的情况.
如果链接从$object一直到下来formatProperty都是一个好主意也是值得怀疑的.您$object需要熟悉调用图.你可以考虑隐藏代表从相关对象并移动formatProperty到relatedObject领取并一气呵成格式或允许获取属性与格式标志.