$a = $b = 0;
上記のコードでは、$a
と$b
の両方に0
の値が割り当てられていますか、それとも$a
は単に$b
を参照していますか?
Rawタイプの場合、これはコピーです。
test.php
$a = $b = 0;
$b = 3;
var_dump($a);
var_dump($b);
出力:
int(0)
int(3)
オブジェクトについては、それは別の話です(PHP 5)
test.php
class Obj
{
public $_name;
}
$a = $b = new Obj();
$b->_name = 'steve';
var_dump($a);
var_dump($b);
出力
object(Obj)#1 (1) { ["_name"]=> string(5) "steve" }
object(Obj)#1 (1) { ["_name"]=> string(5) "steve" }
このコードを次のように見なしてください:
$a = ($b = 0);
式$b = 0
は、0
を$b
に割り当てるだけでなく、結果も生成します。その結果は、割り当ての正しい部分、または単に$b
が割り当てられた値です。
したがって、$a
にも0
が割り当てられます。
自分で試してみたかもしれません
$a = $b = 0;
$a = 5;
echo $b;
または
$a = $b = 0;
$b = 5;
echo $a;
(現在、私は本当に気にしません:D)
したがって:いいえ、どちらも値が0
の独立変数です。
私はこれをよく読むことをお勧めします: http://terriswallow.com/weblog/2007/multiple-and-dynamic-variable-assignment-in-php/ 。コメントの1つで、あなたは読むことができます:
1つの行で複数の割り当てを使用してオブジェクトを割り当てる場合、オブジェクトは参照によって割り当てられることに注意してください。したがって、いずれかの変数を使用してオブジェクトのプロパティの値を変更すると、値は本質的に両方で変化します。
したがって、個人的に変数を個別に割り当てることをお勧めします。
記録のために:
$a = $b = 4;
var_dump($a, $b);
$b = 5;
var_dump($a, $b);
収量:
int(4)
int(4)
int(4)
int(5)
だが:
class Tmp
{
public $foo;
public function __construct()
{
$this->foo = 'bar';
}
}
$a = $b = new Tmp();
var_dump($a, $b);
$a->foo = 'oth';
var_dump($a, $b);
収量:
object(Tmp)#1 (1) {
["foo"]=>
string(3) "bar"
}
object(Tmp)#1 (1) {
["foo"]=>
string(3) "bar"
}
object(Tmp)#1 (1) {
["foo"]=>
string(3) "oth"
}
object(Tmp)#1 (1) {
["foo"]=>
string(3) "oth"
}
したがって、結論はプリミティブへの参照はないが、ISオブジェクトへの参照はあるということです。
$ aと$ bの両方にその値0が割り当てられます。$ aが$ bを参照するようにしたい場合は、アンパサンドでプリエンプトします。例:
$a = & $b = 0;
何を割り当てるかによって異なります。
値を割り当てる場合、割り当ては元の変数を新しい変数にコピーします。
例1:
$a = $b = 0;
$b++; echo $a;
上記のコードは、値による割り当てであるため、0
を返します。
例2:
$a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.
PHP=内の通常の値による割り当て動作の例外は、PHP 5で参照によって割り当てられるオブジェクトで発生します。オブジェクトは、クローンキーワード。
例3
$a = $b = $c = new DOMdocument();
$c->appendChild($c->createElement('html'));
echo $a->saveHTML();
上記のコードは<html></html>
を出力します。
その両方に値0を割り当てます