Mar*_*ato 8 php optimization performance
阅读Google Developers PHP性能提示我看到不建议制作变量的额外副本.
而不是这个:
$description = strip_tags($_POST['description']);
echo $description;
Run Code Online (Sandbox Code Playgroud)
它推荐这个:
echo strip_tags($_POST['description']);
Run Code Online (Sandbox Code Playgroud)
原因是可能不必要的内存消耗.
但是做了一些搜索,我看到一些反驳说PHP实现了"copy-on-write"内存管理.这基本上意味着我们可以为我们喜欢的变量分配一个值,而不必担心实际复制的数据.
所以,我想知道,如果在更复杂的情况,其中,例如$_POST或$_GET变量将在代码中的很多地方都可以使用,无论是更好的做法是使用或不使用额外的变量,考虑到这些标准:
1)安全
2)维护/可读性
3)表现
编辑1
我将使用下面的示例来更好地说明问题.
这种代码更好(考虑上面的标准):
$user = anti_injection($_POST['user']);
$pass = anti_injection($_POST['pass']);
// Continue the code using $user and $pass
Run Code Online (Sandbox Code Playgroud)
或这个?
$_POST['user'] = anti_injection($_POST['user']);
$_POST['pass'] = anti_injection($_POST['pass']);
// Continue the code using $_POST['user'] and $_POST['pass']
Run Code Online (Sandbox Code Playgroud)
PHP 的“惰性复制”仅适用于数组。仅当数组的一个副本发生更改时,数组的数据才会重复,这就是为什么循环可以foreach在原始数组的副本上运行的原因。
对象通过引用传递,即使没有被告知这样做&。例子:
$a = new StdClass();
$b = $a;
$b->derp = "foo";
var_dump($a->derp); // "foo"
Run Code Online (Sandbox Code Playgroud)
资源是对特定扩展要使用的资源的引用,因此无法有意义地复制它们。
其他的都是直接复制的。
无论如何,应该避免不必要的变量。例如,而不是:
$step1 = 123;
$step2 = $step1 * 4;
$step3 = $step2 + 99;
$step4 = $step3 / 3;
echo $step4;
Run Code Online (Sandbox Code Playgroud)
你可以这样写:
echo (123*4+99)/3;
Run Code Online (Sandbox Code Playgroud)
(或者,在这种情况下,只是echo 197;)
关键是,不必要的变量确实会造成混乱,并且可能与您在其他地方定义的变量发生冲突。
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |