2

通过引用传递:

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

输出是:

-test
-

但是当我这样做时

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

输出是:

-test-

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

4

3 回答 3

8

因为trim()不期望引用,因此不会修改传递给它的字符串。仅当函数需要一个引用时才传递引用才有意义 - 然后您无法选择传递引用,因为函数定义是否包含引用参数很重要。

您正在尝试做的事情是,长期以来,PHP中不推荐使用调用时传递引用。除此之外,即使它没有被弃用,它也只适用于实际修改参数的函数。

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

于 2012-04-22T10:32:22.810 回答
1

请看参考:

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

如果您阅读手册,您会明白这trim()不是字符串的引用,而是其string自身的值。

于 2012-04-22T10:34:49.127 回答
1

让我们检查一下PHP 参考对此有何评论:

注意:函数调用上没有参考符号 - 仅在函数定义上。仅函数定义就足以通过引用正确传递参数。从 PHP 5.3.0 开始,您将收到一条警告说“调用时传递引用”已被弃用...

trim签名:

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

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

于 2012-04-22T10:37:37.643 回答