ホームページ >バックエンド開発 >PHPチュートリアル >php はオブジェクト モデルをどのように参照しますか?具体的な引用例を詳しく解説

php はオブジェクト モデルをどのように参照しますか?具体的な引用例を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-08 09:47:131558ブラウズ

PHP には、オーバーロードできるオブジェクトモデルがあり、メンバーをプライベートとして宣言し、外部クラスへのアクセスを許可しません。 , PHP では、サブクラスが親クラスのメンバーをオーバーロードすることができます。PHP のオブジェクト モデルは、オブジェクトを他の データ型

とは異なるものとして扱い、PHP では明示的に参照渡し (参照) する必要はありません。オブジェクトの受け渡しと戻り値については、この章の最後で詳しく説明します。これは、PHP5 の最も重要な新機能です。

より直接的なオブジェクト モデルには、次のような追加の利点があります。使用するメモリが減り、柔軟性が向上しました。
以前のバージョンの PHP では、スクリプトはデフォルトでオブジェクトをコピーしましたが、不要なコピーが回避されるため、スクリプトの実行効率が向上しました。オブジェクト システムは複雑さをもたらしますが、同時に、コピーを削減することで、占有メモリが減り、他の操作に多くのメモリが残されるため、効率が向上します。幸せな開発とは、破棄を許可することです - オブジェクトが破棄される前にクラスメソッドを実行することは、メモリを利用し、PHP を明確にするのにも役立ちます

追加:

PHP5 のメモリ管理

オブジェクト渡し

PHP5 は Zend Engine II を使用します。そしてオブジェクトは、他の一般変数のように Zval に保存されるのではなく、独立した構造
Object
Store に保存されます (PHP4 では、オブジェクトは一般変数と同様に Zval に保存されます)。オブジェクトの内容 (値) ではなく、オブジェクトのポインターのみが Zval に格納されます。オブジェクトをコピーする場合、またはオブジェクトをパラメーターとして関数に渡す場合、データをコピーする必要はありません。同じオブジェクト ポインタを保持し、別の zval がこの特定のオブジェクトが現在指していることをオブジェクト ストアに通知させます。オブジェクト自体はオブジェクト ストアに配置されているため、オブジェクトに加えた変更は、そのオブジェクトへのポインタを保持するすべての zval 構造に影響します。これは、ターゲット オブジェクトに対する変更がソース オブジェクトに影響するため、プログラムに明示されています。これにより、PHP オブジェクトは常に参照 (参照) によって渡されるように見えるため、PHP のオブジェクトはデフォルトで「参照」によって渡され、PHP4 のように & を使用して宣言する必要がなくなりました。

ガベージ コレクション メカニズム
一部の言語 (最も一般的には C) では、データ構造を作成するときに明示的にメモリ割り当てを要求する必要があります。メモリを割り当てたら、情報を変数に保存できます。同時に、マシンが他の変数用にメモリを解放し、メモリ不足を回避できるように、変数の使用が終了したらメモリを解放する必要もあります。
PHP は自動的にメモリを管理し、不要になったオブジェクトを消去できます。 PHP は、単純なガベージ コレクション メカニズムである参照カウントを使用します。各オブジェクトには参照カウンタが含まれており、オブジェクトに接続されている参照ごとにカウンタが 1 ずつ増加します。参照がリビング スペースを離れるか、NULL に設定されると、カウンターは 1 ずつ減らされます。オブジェクトの参照カウンタがゼロになると、PHP はこのオブジェクトを使用する必要がなくなったことを認識し、オブジェクトが占有しているメモリ領域を解放します。

例:


コードは次のとおりです:

<?php   
class Person{   
}   
function sendEmailTo(){   
}   
$haohappy = new Person( );     
// 建立一个新对象:  引用计数    Reference count = 1   
$haohappy2 = $haohappy;         
// 通过引用复制:  Reference count = 2   
unset($haohappy);             
// 删除一个引用: Reference count = 1   
sendEmailTo($haohappy2);        
// 通过引用传递对象:     
// 在函数执行期间:   
//  Reference count = 2   
// 执行结束后:   
// Reference count = 1   
unset($haohappy2);             
// 删除引用: Reference count = 0 自动释放内存空间   
?>

以上がphp はオブジェクト モデルをどのように参照しますか?具体的な引用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。