0

エラーが発生するという問題があります

PHP 致命的なエラー: Call-time pass-by-reference が削除されました....

私はいくつかの同様の質問を発見しました。

しかし、関数宣言を変更できないビルトイン関数など、渡された値を実行時に参照として宣言する必要がある状況をどのように解決できるかについて、本当の答えを提供するものは何もありません??。

たとえば、この例では、3 番目の array_walk パラメータを参照として使用しています

このソリューションを使用して、このコードで配列のインデックスを変更しようとしました:

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


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

参照のないコードは機能しません (新しい配列は変更されず、空のままです)。

そして、それが機能するリファレンスを含むコードは機能しますが、php 5.4以降では機能しません。

それで、そのような状況を処理する方法は何ですか?

ps「__reindex関数で$k変数を参照として宣言する」と言うのが好きなら、それはうまくいきません(それが私が試した最初の方法でした)

4

1 に答える 1

0

一部の人々に役立つ可能性のある方法を見つけました。

このコードを試す

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

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

print_r($aReindexed);

この coud は php 5.4 以降で動作します。

しかし、PHP の下位バージョンでは機能せず、既存の (非匿名の) コールバック関数では使用できません。これは、USE-Keyword が機能するのは新しい Closure 関数を作成するときだけだからです。

于 2019-12-06T13:16:50.000 に答える