繁体   English   中英

处理PHP魔术方法中“未找到”案例的最佳方法是什么?

[英]What's the best way to deal with “not found” cases on PHP magic methods?

有时,您使用PHP魔术方法仅允许访问某些特定的属性/方法,并且不想在错误情况下公开魔术方法的用法。

例子:

  • 仅访问属性子集而不是任意名称的__get__set
  • __call__callStatic ,用于搜索特定方法或简化某些调用,而不是将任意调用转发到其他地方

是否可以将请求发送回PHP进行处理,并发出相应的错误消息?
如果没有,模拟原始PHP“未找到”错误的最佳方法是什么?

这个想法是隐藏我使用魔术方法的实现细节,以允许读取特定的protected属性,并使对象以标准方式运行,就像没有这种属性一样。 同样的想法也适用于其他情况,例如magic __set()__call()

到目前为止,似乎对getters / setters来说最好的行为是使用trigger_error() ,尽管还不是所希望的,因为它仍然可以追溯为用户代码中的一些错误/保护:没有办法触发纯通知,只有用户注意:

public function __get($name) {
    if (in_array($name, $this->allowed_fields)) {
        return $this->$name;
    } else {
        trigger_error('Undefined property: '.static::class."::\$$name", E_USER_NOTICE);
        return null;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM