通过引用传递:
<?php
$str = "test \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
输出是:
-test
-
但是当我做的时候
<?php
$str = "test \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
输出是:
-test-
为什么我不能通过引用传递这个?
答案 0 :(得分:8)
因为trim()
不期望引用,因此不会修改传递给它的字符串。传递引用只有在函数需要时才有意义 - 然后你没有选择而不是传递引用,因为函数 definition 包含引用参数很重要或不。
你要做的是,很长一段时间以来,PHP中的调用时间传递是deprecated。除此之外,即使它没有被弃用,它也仅适用于实际修改参数的函数。
注意:函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。从PHP 5.3.0开始,当您在
&
中使用foo(&$a);
时,您将收到一条警告,指出“呼叫时传递参考”已被弃用。
答案 1 :(得分:1)
答案 2 :(得分:1)
让我们检查PHP Reference对此的说法:
注意:函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。从PHP 5.3.0开始,您将收到一条警告,说“不推荐使用”call-time pass-by-reference“...
查看trim
签名:
string trim ( string $str [, string $charlist ] )
$str
没有任何内容可以通过引用传递。所以它不会。函数trim
将仅使用您的输入来生成输出,但不会修改它 - 它无论如何都不能,因为$str
不是通过引用传递的。