php 5.5和通过引用传递的调用时间已被删除

时间:2014-09-25 09:11:31

标签: php

我有这个代码

$ITOG=array();
      $ex=explode("\n",$TEXT);
         foreach ($ex as $line)
          {
           if (strlen($line)<10){continue;}

           if (($line[0]=='#') || ($line[0]=='/' && $line[1]=='/'))  {continue;}

            $id=sizeof($ITOG);

            $ITOG[$id]['_raw']=$line;

            $this->analyze($id,&$ITOG);
          }

我表示有些人说我必须删除&amp; $并放置$ 是的,它是正确的,它的剂量显示错误 但我的脚本不能在PHP 5.5中工作,但它可以在php 5.2中运行

3 个答案:

答案 0 :(得分:1)

您需要更改analyze功能的定义,以便始终通过引用获取参数2。这背后的想法是,函数每次都应对其数据执行相同的操作。它不应该取决于您是否决定传递变量的副本(按值传递,没有&)或指向变量本身的指针(传递引用,带{{1 }})。

你应该改变你的功能:

&

这样的事情:

public function analyze($id, $something) {

通过定义时间传递引用,您可以从通话中删除public function analyze($id, &$something) {

&

答案 1 :(得分:1)

通过引用传递仍然存在于PHP中,但它已在调用时删除。这意味着以下代码:

function foo($val){
   // ...
}

foo(&$val);
必须重构

,因为不再支持在调用中通过引用传递。 必须更改为以下内容:

function foo(&$val){
   // ...
}

foo($val);

在您的情况下,您必须查找analyze函数的定义,并在第二个参数前面添加&,在函数定义中添加,并且在通话时删除它。它应该看起来像:

function analyze($id, &$ITOG){ // ...

...

$this->analyze($id, $ITOG);

答案 2 :(得分:0)

这意味着函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。

从PHP 5.3.0开始,您将收到一条警告,说明&#34;通话时间通过参考&#34;使用&amp;时已弃用在foo(&amp; $ a);.从PHP 5.4.0开始,删除了调用时传递引用,因此使用它会引发致命错误。