PHPで参照渡しに関する質問があります。私はオンラインで検索しましたが、この問題に固有のものは何も表示されませんでした。以下の関数は、配列からキーを除去し、それが配列の更新値だ返し:PHPの参照呼び出しによるパスの埋め込み
function array_fetch($k, array &$a){
if(isset($a[$k]) || array_key_exists($k, $a)){
$v = $a[$k];
unset($a[$k]);
return $v;
}
return null;
}
以下のようにIコードを使用している:
function foo(){
return ['a', 'b', 'c'];
}
$a = foo();
echo array_fetch(1, $a);
print_r($a);
B
アレイ([0] => a [2] => c)
これは魅力的な働きをしているので、少し短くしたいと思います:
echo array_fetch(1, $a = foo());
print_r($a);
注意:唯一の変数はで...
参照によって渡されるべき B
アレイ([0] => [1] => B [2] => C)
私は変数として参照を与えると仮定するのは間違っていますか?どうやら配列も変わっていないが、私は理解していない。なぜこれが起こるか。式を()
で囲んでも、それは役に立ちません。
更新:
実行可能な回避策はそうのようなラッパー関数を使用することである。
function &ref($var){
return $var;
}
echo array_fetch(1, $a = &ref(['a', 'b', 'c']));
print_r($a);
B
アレイ([0] => [2] = > c)
この問題の回避策は、最初の割り当てを行い、その後、関数呼び出しで変数を使用することです。'$ a = foo(); echo array_fetch(1、$ a); ' –