PHP:通过引用传递

duk*_*vin 2 php pass-by-reference

通过引用传递:

<?php
$str = "test    \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
Run Code Online (Sandbox Code Playgroud)

输出是:

-test
-
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

<?php
$str = "test    \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
Run Code Online (Sandbox Code Playgroud)

输出是:

-test-
Run Code Online (Sandbox Code Playgroud)

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

Thi*_*ter 8

因为trim()不期望引用,因此不会修改传递给它的字符串.传递引用只有在函数需要时才有意义 - 然后你没有选择传递引用,因为如果函数定义包含引用参数,那么重要.

你要做的是,很长一段时间以来,PHP中不推荐使用 call-time pass-by-reference .除此之外,即使它没有被弃用,它也只适用于实际修改参数的函数.

注意:函数调用上没有引用符号 - 仅在函数定义上.单独的函数定义足以通过引用正确传递参数.由于PHP 5.3.0中,你会得到一个警告说"呼叫时间传递通过引用"已经过时,当您使用&foo(&$a);.

  • 因为它毫无意义.为了使CTPBR有用,调用者需要知道有关函数实现的详细信息.根据函数的编写方式,它甚至可能产生意想不到的副作用. (3认同)