web-dev-qa-db-ja.com

PHP =&演算子

これらは両方ともPHPステートメントは同じことをしていますか?:

$o =& $thing;

$o = &$thing;
45
Kev

はい、両方ともまったく同じものです。オブジェクトの参照を取得し、変数$o内で参照するだけです。 thingは変数でなければならないことに注意してください。

38
judda

構文的に言えば、それらは同じものではありません。演算子はアトミック=&であり、これは実際に重要です。たとえば、3項式では=&演算子を使用できません。次のいずれも有効な構文ではありません。

$f = isset($field[0]) ? &$field[0] : &$field;
$f =& isset($field[0]) ? $field[0] : $field;

したがって、代わりにこれを使用します:

isset($field[0]) ? $f =& $field[0] : $f =& $field;
27
Scott Lahteine

両方とも、予想されるT_PAAMAYIM_NEKUDOTAYIMエラーを返します。

$o = &$thing;その後、事の参照をoに割り当てます。以下に例を示します。

$thing = "foo";

$o = &$thing;

echo $o; // echos foo

$thing = "bar";

echo $o; // echos bar
13
Rich Bradshaw

違いは非常に重要です。

<?php
$a = "exists";
$b = $a;
$c =& $a;
echo "a=".$a.", b=".$b.", c=".$c."<br/>"; //a=exists b=exists c=exists

$a = null;
echo "a=".$a.", b=".$b.", c=".$c; //a= b=exists c= 
?>

変数$ cは、$ aがNULLになると消滅しますが、変数$ bはその値を保持します。

12
bbe

はい、彼らがやります。 $oは、両方の場合でthingの-​​ 参照 になります(thingは定数ではなく、実際には変数として意味のあるものと仮定します)。

1
Emil Vikström

thingの前に$を付けた場合、両方とも参照によって割り当てられます。参照の詳細については、PHPこちら: http://www.php.net/manual/en/language.references.whatdo.php をご覧ください。