Shadow33 Asked:2020-10-11 17:58:49 +0000 UTC2020-10-11 17:58:49 +0000 UTC 2020-10-11 17:58:49 +0000 UTC 通过引用传递变量好吗? 772 关于代码可读性和在大型产品中使用的问题。 通过引用来处理变量是不是很好,它不会破坏代码的可读性吗? php 1 个回答 Voted Best Answer Мелкий 2020-10-11T18:46:02Z2020-10-11T18:46:02Z 首先,为什么您可能需要通过引用传递值: 为了性能和节省内存,由于缺乏价值复制。在 PHP 中没有意义。PHP 中的变量以写入时复制的方式传递(值得注意的例外是对象和资源,它们总是通过引用传递)。如果只读取函数中的值,则不会执行真正的复制。在PHP7中,一些标量再次按值传递,但是由于需要创建一个新的zval(基本变量结构),其中嵌入了这些标量的值,这并没有恶化内存和其他资源的消耗. 您真正可以通过引用传递的内容 - 海量数据结构 - 因此并没有真正被复制。同样适用于$a = $b;. 如果 $b 有一个庞大的数组,你不会得到两个庞大的数组——你会得到对同一个数组的两个引用。并且只有当您尝试更改 $a 或 $b 时,数据才会被复制。 更改此变量的值。如果不分析函数本身的代码,或者至少查看函数声明,副作用通常并不明显。引用 Robert Martin 的书 Clean Code: 参数自然被解释为函数的输入。... 示例: appendFooter(s); 此函数是否将 s 作为尾随块附加到其他内容?或者它是否将某种尾随块附加到 s?s 是输入参数还是输出参数?当然,您可以查看签名并获得答案。问题被删除,但只有在检查广告之后。任何强制调用函数签名的行为都会破坏阅读代码的自然节奏。应该避免这种“重复访问”。 因此 - 不要在没有重要原因的情况下使用引用传递。并且有这样的原因 - 选择一个明确且一致的函数名称,它会立即说明该函数更改了传递的参数。
首先,为什么您可能需要通过引用传递值:
为了性能和节省内存,由于缺乏价值复制。在 PHP 中没有意义。PHP 中的变量以写入时复制的方式传递(值得注意的例外是对象和资源,它们总是通过引用传递)。如果只读取函数中的值,则不会执行真正的复制。在PHP7中,一些标量再次按值传递,但是由于需要创建一个新的zval(基本变量结构),其中嵌入了这些标量的值,这并没有恶化内存和其他资源的消耗. 您真正可以通过引用传递的内容 - 海量数据结构 - 因此并没有真正被复制。同样适用于
$a = $b;
. 如果 $b 有一个庞大的数组,你不会得到两个庞大的数组——你会得到对同一个数组的两个引用。并且只有当您尝试更改 $a 或 $b 时,数据才会被复制。更改此变量的值。如果不分析函数本身的代码,或者至少查看函数声明,副作用通常并不明显。引用 Robert Martin 的书 Clean Code:
因此 - 不要在没有重要原因的情况下使用引用传递。并且有这样的原因 - 选择一个明确且一致的函数名称,它会立即说明该函数更改了传递的参数。