0

我有两个问题:

1) 范围解析运算符 ( ::) 对于静态访问是否慢(或比->实例化类慢)?

这个名字有点暗示它必须“解决”一个范围,所以这就是我问的原因。

2)重载呢,特别是__get()__set()

我一直在避免使用它们,因为我听说它们对性能有总体负面影响。

提前感谢您的任何答案/建议。

4

2 回答 2

2
  1. 对于静态方法调用,引擎必须解析类和函数。这需要两次哈希查找。

    例如,方法调用引擎只进行一次哈希查找。

    所以实例方法调用比静态方法调用快一点。

  2. __get 和 __set 具有属性查找的开销(引擎在调用 __get 或 __set 之前检查属性是否存在)加上方法调用的开销。

    所以这比使用 getter 或 setter 慢两倍,比直接访问属性慢 3 或 4 倍。

于 2011-08-26T17:05:18.073 回答
2
  1. 我以比静态访问慢约 3% 的速度对对象访问进行基准测试。
  2. 我对 __set($name, $value) 进行基准测试,比 setBar($value) 之类的传统 setter 慢约 97%,比直接设置属性慢约 321%。
于 2011-08-26T17:16:27.157 回答