除了显而易见的可读性改进(无论如何),在将局部变量分配给超全局数组中的元素值时,与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'];
}
答案 0 :(得分:1)
默认情况下,变量始终按值分配。也就是说, 当您为变量指定表达式时,该值的整个值 原始表达式复制到目标变量中。这个 例如,在指定一个变量的值之后 另外,更改其中一个变量对此没有影响 其他。有关此类任务的更多信息,请参阅 关于表达式的章节。
PHP还提供了另一种为变量赋值的方法:赋值 参考即可。这意味着新变量只是引用(in 换句话说,“成为”或“指向”原始的别名 变量。对新变量的更改会影响原始变量和副变量 反之亦然。
那就是说,除非你使用引用赋值,否则两个例子都是一样的(除了你在第一个中使用几乎无关的额外内存量,有两个变量相同的价值)。
答案 1 :(得分:0)
这取决于PHP版本以及您如何声明成员变量。
在PHP< = 5.3中,一般答案是否定的:两者都是容器访问,PHP在常量时间内作为哈希表查找实现。在object属性的情况下,容器为$this
。在超全局案例中,您的容器为$_SERVER
。
在PHP> = 5.4中,答案可能是。当你宣布proeprty时,PHP optimizes the memory footprint and access path。当您没有声明属性时,查找是一个哈希表扫描,因此两种方法都具有相同的性能。
所以,宣布你的房产是最快的。