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