返回
顶部

PHP传引用报错(5.4版本)

php5.3系列版本以及以前版本,传引用没有什么问题,升级到php5.4以后,传引用的地方,全报错
Fatal error: Call-time pass-by-reference has been removed in D:\www\test\test.php on line 6。看一下下面的例子。
 
例1,递归传引用,在php 5.3及以及版本,测试结果
<?php 
function test($a,&$b){ 
    if($a < $b){ 
        echo $b."<br>"
        $b--
        test($a,&$b); 
    } 

$a = 3
$b = 6
test($a,&$b); 
//运行结果如下 
6 
5 
4 
?>
php 5.4以后就不行了,我是用php 5.4.11测试的。报Fatal error: Call-time pass-by-reference has been removed in D:\www\test\test.php on line 6。
 
例2,php5.4.11上面测试,只测试传引用
<?php 
function test($a,&$b){ 
    if($a < $b){ 
        $b--
        echo $b."<br>"
        //test($a,&$b); 
    } 

$a = 3
$b = 6
test($a,$b);  //php5.4以前版本,输出结果是5 
 
//test($a,&$b); //php5.3输出结果是5,php5.4及以后,报错Fatal error: Call-time pass-by-reference 。。。。 
?>
php5.4以后,定义时可以有&,调用时加上&就会报错。这样调用感觉很怪。
 
例3,php5.4以及递归传引用
<?php 
function test($a,&$b){ 
    if($a < $b){ 
        $b--
        echo $b."<br>"
        test($a,$b); 
    } 

$a = 3
$b = 6
test($a,$b); 
//php5.2,php5.3,php5.4都可以运行,运行结果: 
5 
4 
3 
?>
 
感觉这个5.3升到5.4有点坑爹,如果不知道改变的,升级就很郁闷了。
本次系统正好升级PHP到5.4(原来是5.3),升级后,相关功能不能正常使用,经查,其中原因正是这个
其中采用递归传引用的方式获取部门信息,造成了错误。
如下图:
 
修改的结果是:不论哪种环境,定义时可以有&,调用时不要&,是目前最为兼容的一种写法。
posted @ 2013-10-15 16:05  lfire  阅读(639)  评论(0编辑  收藏  举报