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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...