2012-04-22 49 views
2

通过引用传递:PHP:按引用传递

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

输出为:

-test 
- 

但是当我做

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

输出为:

-test- 

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

回答

8

因为trim()不期望的参考,因此不修改传递给它的字符串。经过参考才有意义,如果该函数需要一个 - 然后你没有的传递,因为如果函数定义包含引用参数或没有什么重要的参考选择。

你正在尝试做的,在调用的时候传址引用deprecated在PHP中,因为很长一段时间。除此之外,即使它不会被弃用,将只对实际修改参数的函数工作。

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

+0

为什么他们不赞成使用PHP? – dukevin 2012-04-22 10:34:10

+3

因为它根本没有意义。为了使CTPBR有用,调用者需要知道函数的实现细节。取决于函数的写法,甚至可能会有意想不到的副作用。 – ThiefMaster 2012-04-22 10:35:43

1

让检查什么PHP Reference说一下:

注:有一个函数调用无符号 - 只有函数定义。单独的函数定义足以通过引用正确传递参数。由于PHP 5.3.0中,你会得到一个警告说“通话时传递的引用”已经过时......

看那trim签名:

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

没有什么约$str将通过引用传递。所以它不会。函数trim将仅使用您的输入来生成输出,但不会修改它 - 它不能反正,因为$str未通过引用传递。