[英]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.