ホームページ > php教程 > php手册 > php5におけるオブジェクト参照の注意点

php5におけるオブジェクト参照の注意点

WBOY
リリース: 2016-06-21 09:06:58
オリジナル
977 人が閲覧しました

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!";

echo $t2->aa();

unset($t2);
?>

いいえ、コード 4 とコード 5 の実行結果はまったく同じです。この結果は、Java でのオブジェクト参照の実装方法が最終的に一貫していることを意味します。 -------------------------------------- ----------- ----
結論として、php4の「&」メソッドは「アドレスを渡す」であるのに対し、php5のデフォルトメソッドは「quote」(しつこいバッチ)であることがわかりました。

php5でオブジェクトを参照するときは、選択する必要がありますプログラムが比較的大きく、同じオブジェクトを参照する変数が多く、使用後にオブジェクトを手動でクリアしたい場合は、個人的には「&」メソッドを使用することをお勧めします。それ以外の場合は、php5 のデフォルトのメソッドを使用します。また、php5 で大きな配列を転送する場合は、メモリ容量を節約できるため、「&」メソッドを使用することをお勧めします。





関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート