[英]PHP and variable assignment versus direct access to superglobal array
因此,除了明顯的可讀性提高(無論如何對我而言)之外,在PHP中為超全局數組中的元素值分配局部變量而不是直接訪問元素的值時,還可以獲得性能上的好處嗎?
例如,給定一個類重復使用: $_SERVER['REQUEST_URI']
作為許多函數的參數,創建類屬性(或與此相關的具有類范圍的局部變量)並使用對性能有好處。變量直接? 我有C#背景,並且從經驗中學到了使用局部變量確實可以帶來性能上的好處。
$url = $_SERVER['REQUEST_URI'];
public function doSomething() {
echo $this->url;
}
public function doSomethingElse() {
echo $this->url;
}
與
public function doSomething() {
echo $_SERVER['REQUEST_URI'];
}
public function doSomethingElse() {
echo $_SERVER['REQUEST_URI'];
}
默認情況下,變量始終由value分配 。 也就是說,在將表達式分配給變量時,原始表達式的整個值都將復制到目標變量中。 例如,這意味着將一個變量的值分配給另一個變量后,更改其中一個變量將不會對另一個變量產生影響。 有關此類分配的更多信息,請參見“表達式”一章。
PHP還提供了另一種為變量賦值的方法: 通過引用賦值 。 這意味着新變量僅引用原始變量(換句話說,“成為其別名”或“指向”)。 對新變量的更改會影響原始變量,反之亦然。
就是說,除非您使用引用賦值 ,否則兩個示例都是同一件事(除了在第一個示例中使用幾乎不相關的額外內存,並且兩個變量具有相同的值)。
它取決於PHP版本以及如何聲明成員變量。
在PHP <= 5.3中,通常的答案是“否”:兩者都是容器訪問,PHP在恆定時間內將其實現為哈希表查找。 在對象屬性的情況下,您的容器為$this
。 在超全局情況下,您的容器為$_SERVER
。
在PHP> = 5.4中,答案可能是。 聲明屬性后,PHP會優化內存占用量和訪問路徑 。 如果不聲明該屬性,則查找是哈希表掃描,因此這兩種方法的性能均相同。
因此,聲明屬性是最快的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.