php5.5和调用时间传递引用已被删除


php 5.5 and Call time pass by reference has been removed

我有这个代码

$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);
          }

我展示了一些人说我必须删除&$和地点$是的,它是正确的,而且没有显示错误但我的脚本在php5.5中不起作用,但在php5.2中起作用

您需要更改analyze函数的定义,使其始终引用参数2。这背后的想法是,一个函数每次都应该对其数据做同样的事情。它不应该取决于您决定传递变量的副本(按值传递,不带&)还是指向变量本身的指针(按引用传递,带&)。

你应该改变你的功能,从这样的东西:

public function analyze($id, $something) {

类似的东西:

public function analyze($id, &$something) {

通过使其通过引用定义时间,您可以从呼叫中删除&

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

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

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

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

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

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

function analyze($id, &$ITOG){ // ...
...
$this->analyze($id, $ITOG);

这意味着函数调用上没有引用号,只在函数定义上。仅函数定义就足以通过引用正确传递参数。

从PHP 5.3.0开始,当您使用&在foo(&$a);中;。从PHP 5.4.0开始,通过引用传递调用时间被删除,因此使用它将引发致命错误。