通过引用传递:PHP:按引用传递
<?php
$str = "test \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
输出为:
-test
-
但是当我做
<?php
$str = "test \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
输出为:
-test-
为什么我不能通过引用来传递?
通过引用传递:PHP:按引用传递
<?php
$str = "test \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
输出为:
-test
-
但是当我做
<?php
$str = "test \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
输出为:
-test-
为什么我不能通过引用来传递?
因为trim()
不期望的参考,因此不修改传递给它的字符串。经过参考才有意义,如果该函数需要一个 - 然后你没有的不传递,因为如果函数定义包含引用参数或没有什么重要的参考选择。
你正在尝试做的,在调用的时候传址引用deprecated在PHP中,因为很长一段时间。除此之外,即使它不会被弃用,将只对实际修改参数的函数工作。
注:函数调用中没有参考符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。从PHP 5.3.0开始,当您在
foo(&$a);
中使用&
时,您将收到一条警告,指出“呼叫时传递参考”已弃用。
让检查什么PHP Reference说一下:
注:有一个函数调用无符号 - 只有函数定义。单独的函数定义足以通过引用正确传递参数。由于PHP 5.3.0中,你会得到一个警告说“通话时传递的引用”已经过时......
看那trim
签名:
string trim (string $str [, string $charlist ])
没有什么约$str
将通过引用传递。所以它不会。函数trim
将仅使用您的输入来生成输出,但不会修改它 - 它不能反正,因为$str
未通过引用传递。
为什么他们不赞成使用PHP? – dukevin 2012-04-22 10:34:10
因为它根本没有意义。为了使CTPBR有用,调用者需要知道函数的实现细节。取决于函数的写法,甚至可能会有意想不到的副作用。 – ThiefMaster 2012-04-22 10:35:43