gpt4 book ai didi

php - 在 PHP 中复制或不复制额外的变量?

转载 作者:可可西里 更新时间:2023-11-01 12:35:03 26 4
gpt4 key购买 nike

阅读Google Developers PHP performance tips我看到不建议额外复制一个变量。

取而代之的是:

$description = strip_tags($_POST['description']);
echo $description;

它推荐这个:

echo strip_tags($_POST['description']);

原因可能是不必要的内存消耗。

但是在进行一些搜索时,我看到一些反驳说 PHP 实现了“写时复制”内存管理。这基本上意味着我们可以为任意数量的变量赋值,而不必担心实际复制的数据。

所以我想知道是否在更复杂的情况下,例如 $_POST$_GET 变量将在代码的许多地方使用,是否考虑到这些标准,使用或不使用额外变量是更好的做法:

1)安全

2) 维护/可读性

3)性能

编辑 1

我将使用下面的示例来更好地说明问题。

这种代码是否更好(考虑上述标准):

$user = anti_injection($_POST['user']);
$pass = anti_injection($_POST['pass']);

// Continue the code using $user and $pass

还是这个?

$_POST['user'] = anti_injection($_POST['user']);
$_POST['pass'] = anti_injection($_POST['pass']);

// Continue the code using $_POST['user'] and $_POST['pass']

最佳答案

PHP 的“惰性复制”只适用于数组。数组的数据只有在数组的一个副本发生更改时才会复制,这就是为什么 foreach 循环可以在原始数组的副本上工作的原因。

对象通过引用传递,即使没有用 & 告知这样做。示例:

$a = new StdClass();
$b = $a;
$b->derp = "foo";
var_dump($a->derp); // "foo"

资源是对特定扩展程序使用的资源的引用,因此无法有意义地复制它们。

其他的都是直接复制。


无论如何都应该避免不必要的变量。例如,而不是:

$step1 = 123;
$step2 = $step1 * 4;
$step3 = $step2 + 99;
$step4 = $step3 / 3;
echo $step4;

你可以这样写:

echo (123*4+99)/3;

(或者,在这种情况下,只是 echo 197;)

重点是,不必要的变量确实会造成困惑,并可能与您在别处定义的变量发生冲突。

关于php - 在 PHP 中复制或不复制额外的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11417010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com