PHP:通过引用传递

时间:2012-04-22 10:29:41

标签: php pass-by-reference

通过引用传递:

<?php
$str = "test    \n";
trim(&$str);
echo "-" . "$str" . "-";
?>

输出是:

-test
-

但是当我做的时候

<?php
$str = "test    \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>

输出是:

-test-

为什么我不能通过引用传递这个?

3 个答案:

答案 0 :(得分:8)

因为trim()不期望引用,因此不会修改传递给它的字符串。传递引用只有在函数需要时才有意义 - 然后你没有选择而不是传递引用,因为函数 definition 包含引用参数很重要或不。

你要做的是,很长一段时间以来,PHP中的调用时间传递是deprecated。除此之外,即使它没有被弃用,它也仅适用于实际修改参数的函数。

  

注意:函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。从PHP 5.3.0开始,当您在&中使用foo(&$a);时,您将收到一条警告,指出“呼叫时传递参考”已被弃用。

答案 1 :(得分:1)

请参阅参考资料:

http://php.net/manual/en/function.trim.php

如果您阅读本手册,您将理解trim()不期望引用字符串,而是string本身的值。

答案 2 :(得分:1)

让我们检查PHP Reference对此的说法:

  

注意:函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。从PHP 5.3.0开始,您将收到一条警告,说“不推荐使用”call-time pass-by-reference“...

查看trim签名:

string trim ( string $str [, string $charlist ] )

$str没有任何内容可以通过引用传递。所以它不会。函数trim将仅使用您的输入来生成输出,但不会修改它 - 它无论如何都不能,因为$str不是通过引用传递的。