2011-08-26 36 views
0

我有2個問題:PHP:範圍解析操作符與超載性能比較

1)是範圍解析操作符(::)慢於靜態訪問(或大於->慢的一個實例化類)?

名稱有點建議它必須「解決」範圍,這就是爲什麼我問。

2)過載情況如何,特別是__get()__set()

我一直在避免使用它們,因爲我聽說他們對性能有着總體的負面影響。

在此先感謝您的任何答案/建議。

+0

你有沒有做過任何基準測試?如果有的話,訪問一個靜態屬性應該是QUICKER,因爲PHP不必精確地確定哪個對象的實例正在被訪問 - 它只是潛入對象定義中。 –

回答

2
  1. 在約3%,比靜態訪問慢我基準對象訪問。
  2. 我比_set($ name,$ value)的速度慢了97%,比傳統的setter($ value)要慢,大約比直接設置屬性慢321%。
2
  1. 對於靜態方法調用,引擎必須解析類和函數。這花費了兩次散列查找。

    例如方法調用引擎只做一次散列查找。

    所以實例方法調用比靜態方法調用快一點。

  2. __get和__set具有屬性查找的開銷(引擎在調用__get或__set之前檢查屬性是否存在)以及方法調用的開銷。

    所以這比使用getter或setter慢兩倍,比直接訪問屬性慢3到4倍。