PHP:通过引用传递

PHP:通过引用传递,php,pass-by-reference,Php,Pass By Reference,参考传递: <?php $str = "test \n"; trim(&$str); echo "-" . "$str" . "-"; ?> 但当我这么做的时候 <?php $str = "test \n"; $str = trim($str); echo "-" . "$str" . "-"; ?> 为什么我不能通过引用传递它?因为trim()不需要引用,因此不会修改传递给它的字符串。传递引用只有在函数需要引用的情况下才有意义,并且您没有不传递引

参考传递:

<?php
$str = "test    \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
但当我这么做的时候

<?php
$str = "test    \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
为什么我不能通过引用传递它?

因为
trim()
不需要引用,因此不会修改传递给它的字符串。传递引用只有在函数需要引用的情况下才有意义,并且您没有不传递引用的选择,因为如果函数定义包含引用参数与否,那么重要的是什么

很长一段时间以来,您试图做的是,通过引用传递调用时间。除此之外,即使它没有被弃用,它也只适用于实际修改参数的函数

注意:函数调用上没有参考符号-仅在函数定义上。仅函数定义就足以通过引用正确传递参数。从PHP5.3.0开始,当您在
foo(&$a)中使用
&
时,您将收到一条警告,指出“通过引用传递调用时间”是不推荐的


请参阅参考资料:

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

如果您阅读本手册,您将了解到
trim()
不需要字符串的引用,而是
string
本身的值。

让我们检查一下这方面的说明:

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

请看签名:

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

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

为什么他们不赞成在php中使用它?因为它毫无意义。为了使CTPBR有用,调用方需要了解函数实现的细节。根据函数的编写方式,它甚至可能产生意想不到的副作用。
string trim ( string $str [, string $charlist ] )