PHP和变量赋值与直接访问超全局数组

时间:2015-09-16 13:24:18

标签: php arrays

除了显而易见的可读性改进(无论如何),在将局部变量分配给超全局数组中的元素值时,与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'];
}

2 个答案:

答案 0 :(得分:1)

From PHP Docs

  

默认情况下,变量始终按值分配。也就是说,   当您为变量指定表达式时,该值的整个值   原始表达式复制到目标变量中。这个   例如,在指定一个变量的值之后   另外,更改其中一个变量对此没有影响   其他。有关此类任务的更多信息,请参阅   关于表达式的章节。

     

PHP还提供了另一种为变量赋值的方法:赋值   参考即可。这意味着新变量只是引用(in   换句话说,“成为”或“指向”原始的别名   变量。对新变量的更改会影响原始变量和副变量   反之亦然。

那就是说,除非你使用引用赋值,否则两个例子都是一样的(除了你在第一个中使用几乎无关的额外内存量,有两个变量相同的价值)。

答案 1 :(得分:0)

这取决于PHP版本以及您如何声明成员变量。

在PHP< = 5.3中,一般答案是否定的:两者都是容器访问,PHP在常量时间内作为哈希表查找实现。在object属性的情况下,容器为$this。在超全局案例中,您的容器为$_SERVER

在PHP> = 5.4中,答案可能是。当你宣布proeprty时,PHP optimizes the memory footprint and access path。当您没有声明属性时,查找是一个哈希表扫描,因此两种方法都具有相同的性能。

所以,宣布你的房产是最快的。