PHP:范围解析运算符&超载性能

时间:2011-08-26 16:43:10

标签: php oop overloading scope-resolution

我有两个问题:

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

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

2)重载怎么样,特别是__get()__set()

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

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

2 个答案:

答案 0 :(得分:2)

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

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

    因此实例方法调用比静态方法调用快一点。

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

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

答案 1 :(得分:2)

  1. 我对对象访问进行基准测试,比静态访问慢约3%。
  2. 我对__set($ name,$ value)进行基准测试,比setBar($ value)等传统setter慢约97%,比直接设置属性慢约321%。