我當前的Web應用程序使用約30左右的Contants(DEFINE())。我正在閱讀變量更快的東西。假設有一個避免變量重寫的命名約定,我所看到的唯一的另一個缺點就是這些變量必須被定義爲全局變量,一些如何在每個函數中定義。哪個更快?常量,變量或變量陣列
哪個更快?我在整個應用程序中使用這些常量,並且可能會永遠向列表中添加更多,並且它們被用於函數和類中。
我當前的Web應用程序使用約30左右的Contants(DEFINE())。我正在閱讀變量更快的東西。假設有一個避免變量重寫的命名約定,我所看到的唯一的另一個缺點就是這些變量必須被定義爲全局變量,一些如何在每個函數中定義。哪個更快?常量,變量或變量陣列
哪個更快?我在整個應用程序中使用這些常量,並且可能會永遠向列表中添加更多,並且它們被用於函數和類中。
這種差異真的很小(微型優化)。你最好將一些常量封裝在類中,這樣你就可以通過Classname::CONSTANT
來訪問它們,從而不會污染應用程序的全局名稱空間。
我也無法想象任何速度差異都是必然的。在許多情況下,變量比常量更容易使用,這當然是正確的。
然而,看起來你真正的問題是你有一堆配置數據,你想避免必須將大量變量傳遞給函數,或者必須使它們全部全局化。
沒有一個適用於所有人的答案,但是一個流行的解決方案是使用註冊表類或自己創建一個註冊表類。你可以通過聲明一個php數組來很容易地做到這一點。然後你初始化註冊表對象,你的函數和類通過靜態方法調用來訪問它。作爲例子,我不會提供片段,而只是以zend_config和zend_registry爲例。雖然ZF提供了這些功能,但您不應該害怕推出自己的版本,因爲如果您想避免在項目中使用ZF,那麼這兩個版本都不會以更簡單的形式重新創建。
快速測試表明,定義常量(define('FOO', 'bar');
)比定義一個變量($foo = 'bar';
),但使用已定義的慢大約16至18倍(常數)值大約快4到6倍。
「不成熟的優化是萬惡之源」。告訴我,如果你能測量任何差異;) – KingCrunch
節省的時間是如此渺茫,它不值得任何考慮。 –
什麼時候值得這個優化?每次引用常量是否有成本?這比當你引用一個變量時多嗎?這30個常量是每個頁面上的參考100。 – David