【问题标题】:PHP 5.4 Call-time pass-by-reference - How to fix it?PHP 5.4 Call-time pass-by-reference - 如何修复它?
【发布时间】:2019-12-06 13:16:50
【问题描述】:

我遇到错误的问题

PHP 致命错误:调用时传递引用已在....中删除。

我发现了一些类似的问题,例如

但是没有什么能提供真实的答案如何解决您需要将传递的值声明为运行时的引用的情况,例如无法更改函数声明的内置函数??。

例如对于这个例子third array_walk parameter as reference: ?

我尝试使用此解决方案通过以下代码更改我的数组的索引:

function __reindex(&$v,$k, &$aReindexed) 
{ 
   $kNew = $k+100;
   $aReindexed[$kNew] = $v; 
}


$aTest = array(4,"f","_","test");
array_walk($aTest,"__reindex", &$aReindexed );

Code without the refference 不起作用(新数组未更改并保持为空)。

Code with the refference 可以工作,但不能在 php 5.4 及更高版本中使用。

那么处理这种情况的方法是什么?

附言如果有人喜欢说“将 __reindex 函数中的 $k 变量声明为引用”,那么这将不起作用(这是我尝试的第一种方式)

【问题讨论】:

    标签: php array-walk


    【解决方案1】:

    我找到了一种可能对某些人有所帮助的方法。

    Try this Code

    $aTest = array(4,"f","_","test");
    $aReindexed = array();
    
    array_walk($aTest, function(&$v,$k) use (&$aReindexed) { 
      $kNew = $k+100;
      $aReindexed[$kNew] = $v; 
    } );
    
    print_r($aReindexed);
    

    此代码适用于 php 5.4 及更高版本。

    但它不适用于较低的 php 版本,并且您不能将其与已经存在的(非匿名)回调函数一起使用,因为 USE-Keyword 仅在您创建新的 Closure 函数时才有效。

    【讨论】:

      猜你喜欢
      • 2013-11-08
      • 2012-02-16
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 2012-03-04
      相关资源
      最近更新 更多