我有两个问题:
1)范围解析操作符(::
)对于静态访问是慢的(或者对于实例化类比->
慢)?
这个名字有点暗示它必须"解析"一个作用域,所以这就是我问的原因。
2)超载怎么办,特别是__get()
和__set()
?
我一直避免使用它们,因为我听说它们对性能有负面影响。
提前感谢您的回答/建议
- 我对对象访问进行基准测试,比静态访问慢3%。
- 我对__set($name, $value)进行基准测试,其速度比setBar($value)等传统设置器慢约97%,比直接设置属性慢约321%。
-
对于静态方法调用,引擎必须解析类和函数。这需要两次哈希查找。
For instance method调用引擎只做一次哈希查找。
所以实例方法调用比静态方法调用快一点。
-
__get和__set有一个属性查找的开销(引擎在调用__get或__set之前检查一个属性是否存在)加上一个方法调用的开销。
所以这比使用getter或setter要慢两倍,比直接访问属性要慢3到4倍。