PHP:作用域解析操作符&重载绩效


PHP: Scope Resolution Operator & Overloading perfomance

我有两个问题:

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

这个名字有点暗示它必须"解析"一个作用域,所以这就是我问的原因。

2)超载怎么办,特别是__get()__set() ?

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

提前感谢您的回答/建议

  1. 我对对象访问进行基准测试,比静态访问慢3%。
  2. 我对__set($name, $value)进行基准测试,其速度比setBar($value)等传统设置器慢约97%,比直接设置属性慢约321%。
  1. 对于静态方法调用,引擎必须解析类和函数。这需要两次哈希查找。

    For instance method调用引擎只做一次哈希查找。

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

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

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