微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何处理“调用非对象上的成员函数”

你如何确保你没有得到“对非对象的成员函数调用”致命?

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上以一次性获取和格式化或允许使用格式化标志获取属性.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐