ホームページ  >  記事  >  バックエンド開発  >  $a=new A と $a= & new A に違いはありますか?解決

$a=new A と $a= & new A に違いはありますか?解決

WBOY
WBOYオリジナル
2016-06-13 13:31:021351ブラウズ

$a=new A と $a= & new A に違いはありますか?
$a=new A; // $a は new A のポインタのコピーです ($a はポインタ自体を保存します)


$a=& new A;新しい A のポインタへの参照です ($a はポインタのアドレスを保存します)


上記の記述は正しいでしょうか?


さらに:

$c= & $a の場合、なぜ $a も A のポインタへの参照になるのでしょうか?



-----解決策---------
$ いつc= & $a の場合、なぜ $a も A のポインタへの参照になるのでしょうか?

は $a=& new A ?
から継承されます。
------解決策---------
ふふ、&はCシンボルのアドレスです
------解決策---------
php の変数はすべてポインタですが、文字列の変数はすべてポインタです、int など、assignment = はオブジェクトのコピーです。オブジェクトの場合、assignment = はアドレスのコピー (つまり参照) です。これでよく理解できた気がします。
------解決策-----
PHP のバージョンに関係なく、新しい演算子が生成されますこれらはすべて
$a =& new A;
を引用しています。この書き方は不正確です。オブジェクトへの参照を変数に代入しますか?
そのため、書き込み形式を標準化するために php5.3 で新しいエラー タイプが追加されました
非推奨: new の戻り値を参照によって割り当てることは非推奨です

php5.2 以前ではエラーは報告されません. しかし、それが間違いではないというわけではありません。
E_NOTICE レベルのエラーをブロックしたようなものですが、結局のところ、未定義の変数や添字を使用していることになります。



------解決策---------
非常に複雑な問題
------解決策----------------------
オーソドックスな使い方
$c = new A;

他の用法はナンセンスとして扱ってください。
------解決策---------
ああ、すごい人のブログを読んでみよう
http://www.laruence.com/2008/09/19/520.html
6 階で問題を説明しました

------解決策---------
マニュアルを確認してください:

概要引用:
PHP での引用とは、同じ変数の内容に異なる名前でアクセスすることを意味します。これは C ポインターとは異なり、参照はシンボル テーブルのエイリアスです。 PHP では変数名と変数の内容が異なるため、同じ内容でも異なる名前が付けられることに注意してください。最も近い類似点は、Unix のファイル名とファイル自体です。変数名はディレクトリ エントリであり、変数の内容はファイル自体です。参照は、Unix ファイル システムのハードリンクと考えることができます。

new について:
「type」のインスタンスを構築し、オブジェクトへの参照を「result」に保存します。
したがって、$c = new A; はオブジェクトのコピーではなく代入参照です。 。 $c = &new A; は間違っています。

PHP 5 では、new は自動的に参照を返すため、ここでの =& の使用は廃止され、E_STRICT レベルのメッセージが生成されます。
------解決策---------
課題について:

メモ代入操作では、元の変数の値が新しい変数にコピーされるため (値による代入)、一方を変更しても他方には影響しません。これは、非常に密なループで大きな配列などの値をコピーするのにも適しています。 $var = &$othervar; 構文を使用して参照割り当てを使用することもできます。参照割り当てとは、両方の変数が同じデータを指し、データのコピーが存在しないことを意味します。引用の詳細については、引用の説明を参照してください。 PHP 5 では、新しい clone キーワードが明示的に使用されない限り、オブジェクトは常に参照によって割り当てられます。


PHP コード

<?php

$a = 1;
$b = &$a;
$c = $a;

$b = 2;
echo "a:$a、b:$b、c:$cn";

$d = $b;
$d = 3;
echo "a:$a、b:$b、c:$cn";

クラスA {
    パブリック $foo = 1;
}

$oa = 新しい A;
$ob = $oa;

$oa->foo = 2;
echo "oa:$oa->foo、ob:$ob->foon";
?>
<br><font color="#e78608">------解決策---------</font><br>$a =1;<br>$b = & $a; <br>異なる変数は同じアドレスを指します。そのうちの 1 つ ($b=2) が変更されると、他の変数も変更されます ($a=2)。 b)) $a = 2 はまだ存在します。 <br><br>$a =1;<br>$b = $a;//彼は $b=1<br>=> $a =1;$b=1;<br>$b $ a 一銭も関係ない、あなたはあなた、私は私、誰も誰のことも気にすることはできません。 <br><br>$a=& new A; こういうのは本当に使わない、面白くない。 <div class="clear"></div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。