php5|オブジェクト|問題
php4時代では、オブジェクト参照は単純な「&」記号によって実装されていました。
php5($obj1 = $obj2;)では、デフォルトは参照メソッドであり、意図的に「&」記号を追加する必要はありません。 . しかし、php5 ではまだ php4 種類の引用メソッドがあります
これら 2 つのメソッドの違いを見てみましょう
古い引用メソッドは次のように実装されています。コードは php4 と php5 で実行できます):
コード 1:
class test{ function get(){return "aaaaa";} } $t1 = new test(); $t2 = &$t1 ;
echo $t1->get()."
";
echo $t2->get()."
";
?>
なので、変数 $t1 と $t2 は、メモリ内の同じオブジェクト
コード 2:
class test{ function get(){return "aaaaa";} } $t1 = new test(); $t2 = &$t1;
unset ($t1);
echo ($t1===null)? "t1 は null です。
": "t1 は null ではありません。
";
echo $t2->get ()."
";
? >
t1 変数の設定が解除されると、t1 は null になりますが、t2 は元のオブジェクトを指し続けます。
コード 3:
class test{ function get (){return "aaaaa";} } $t1 = new test(); $t2 = &$t1;
$t1 = null;
echo ($t1===null)? "t1 は null です。
": "t1 は null ではありません。
" ;
echo ($t1===null)? "t2 is null.
": "t2 is not null.
";
?>
t1=null、t1 は null になりましたが、t2 も null になりました
なんと、t1 と t2 の結果がなぜ異なるのでしょうか? 「&」を介して引用する方法は、実際には「参照」と呼ぶべきではなく、「アドレスによる受け渡し」と呼ぶべきであることを理解するのに長い時間がかかりました。 C 言語ではアドレスによる受け渡しの概念が非常に明確で、コードの書き方も Java でのオブジェクト参照の扱いと同じだと思いました。 .....ああ!
php5 の参照メソッドを見てみましょう。
コード 4:
class test1{ public function aa(){
use using usingずっとずっとオフ ‐ ‐ ‐ ‐ use using using using through ' s ' through ' s ' using ' s ' test ' s ' through ' s through using ''s ' through through ''s' through to ‐to‐to‐‐‐‐‐ to to be test1{
t2 = $t1;
$t1 = null;
echo $t2->aa();
unset($t2);
?>
コード 5:
class test1{
public function aa( ) {H ho "ああああああああ";
Public function __destruct () {
o "Game Over!";
unset($t2);
?>
いいえ、コード 4 とコード 5 の実行結果はまったく同じです。この結果は、Java でのオブジェクト参照の実装方法が最終的に一貫していることを意味します。 -------------------------------------- ----------- ----
結論として、php4の「&」メソッドは「アドレスを渡す」であるのに対し、php5のデフォルトメソッドは「quote」(しつこいバッチ)であることがわかりました。
php5でオブジェクトを参照するときは、選択する必要がありますプログラムが比較的大きく、同じオブジェクトを参照する変数が多く、使用後にオブジェクトを手動でクリアしたい場合は、個人的には「&」メソッドを使用することをお勧めします。それ以外の場合は、php5 のデフォルトのメソッドを使用します。また、php5 で大きな配列を転送する場合は、メモリ容量を節約できるため、「&」メソッドを使用することをお勧めします。