PHP5 には、この章で後ほど詳しく説明する、単一継承、アクセス制限付きのオーバーロード可能なオブジェクト モデルがあり、さらに、PHP では、プロパティとメソッドのアクセス制限がサポートされています。メンバーをプライベートとして宣言し、外部クラスからのアクセスを禁止します。最後に、PHP では、サブクラスがその親クラスからメンバーをオーバーロードできます。PHP 5 のオブジェクト モデルは、オブジェクトを他のデータとして扱います。PHP では、参照によって渡されません。参照によってオブジェクトを明示的に渡したり返したりする必要があります。参照ベースのオブジェクト モデルについては、PHP5 の最も重要な新機能です。
以前のバージョンの PHP では、オブジェクトはデフォルトでコピーされるだけなので、時間がかかりません。スクリプトの実行効率の向上は、オブジェクト システムが複雑になる一方で、実行効率にもメリットをもたらします。これは、メモリの使用量が減り、他の操作に多くのメモリが残されることを意味します。これにより効率も向上します。
Zand Engine 2 は柔軟性が高く、オブジェクトが破棄される前にクラス メソッドを実行できるので、メモリの利用にも優れており、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
$ haohappy;