ホームページ  >  記事  >  バックエンド開発  >  PHP メモリ管理コンストラクターとデストラクター_PHP チュートリアル

PHP メモリ管理コンストラクターとデストラクター_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:33:51815ブラウズ

初めて PHP 言語を学習する友人は、PHP デストラクターについてあまり知らないかもしれません。この記事では、この側面に関連する知識を詳しく説明します。お役に立てれば幸いです。

ほとんどのクラスには、コンストラクターと呼ばれる特別なメソッドがあります。オブジェクトが作成されると、コンストラクターが自動的に呼び出されます。コンストラクターは、通常、いくつかの便利な初期化タスクを実行するために使用されます。コンストラクターの宣言は、その名前が __construct() である必要があることを除いて、他の操作の宣言と同じです。これは PHP5 での変更であり、以前のバージョンではコンストラクターの名前はクラス名と同じである必要がありました。下位互換性のため、クラスに __construct() という名前のメソッドがない場合、PHP はクラスと同じ名前のメソッドを検索します。

リーリー

コンストラクターの反対はデストラクターです。デストラクタは、PHP5 で新しく追加された内容です。PHP4 にはデストラクタはありません。デストラクターを使用すると、クラスが破棄される前に一部の操作または関数を実行できます。これは通常、クラスへのすべての参照がリセットされるかスコープ外になると自動的に行われます。 コンストラクターの名前と同様に、クラスのデストラクターの名前は __destruct() でなければなりません。デストラクターはパラメータを取ることができません。

リーリー

__construct という名前のクラスで関数を宣言すると、この関数はコンストラクターとして扱われ、オブジェクト インスタンスの作成時に実行されます。 明確にするために、__ は 2 つのアンダースコアです。 他の関数と同様に、コンストラクターにはパラメーターまたはデフォルト値を含めることができます。 クラスを定義してオブジェクトを作成し、そのすべてのプロパティをステートメントに含めることができます。

オブジェクトが破棄される前に PHP が呼び出す __destruct という関数を定義することもできます。 これは PHP デストラクターと呼ばれます。

継承はクラスの強力な機能です。 あるクラス (サブクラス/派生クラス) は、別のクラス (親クラス/基本クラス) の機能を継承できます。 派生クラスには基本クラスのすべてのプロパティとメソッドが含まれており、派生クラスに他のプロパティとメソッドを追加できます。 基本クラスのメソッドとプロパティをオーバーライドすることもできます。 3.1.2 に示すように、extends キーワードを使用してクラスを拡張できます。

コンストラクターがどのように継承されるのか疑問に思われるかもしれません。 他のメソッドとともに継承された場合、オブジェクトの作成時に実行されません。 この機能が必要な場合は、:: 演算子を使用する必要があります。 これにより、名前空間を指すことができます。 parent は親クラスの名前空間を指します。parent::__construct を使用して親クラスのコンストラクターを呼び出すことができます。

一部のオブジェクト指向言語では、コンストラクターにクラスの後に名前を付けます。 PHP の以前のバージョンにも同じことが当てはまり、この方法は現在でも機能します。つまり、クラスに Animal という名前を付け、その中に Animal という名前のメソッドを作成した場合、このメソッドはコンストラクターになります。クラスに __construt コンストラクターと、クラスと同じ名前の関数の両方がある場合、PHP は __construct をコンストラクターとして扱います。これにより、以前の PHP バージョンで作成されたクラスを引き続き使用できるようになります。 ただし、新しいスクリプト (PHP5) では __construct を使用する必要があります。

PHP でコンストラクターを宣言するこの新しい方法により、コンストラクターが属するクラスの名前に関係なく、コンストラクターに一意の名前を付けることができます。 こうすることで、クラスの名前を変更するときにコンストラクターの名前を変更する必要がなくなります。

コンストラクターには、PHP の他のクラス メソッドと同じアクセス権を与えることができます。 アクセス メソッドは、特定の範囲からオブジェクトをインスタンス化する機能に影響します。 これにより、シングルトン パターンなどのいくつかの固定設計パターンの実装が可能になります。

PHP デストラクター、コンストラクターの反対。 PHP はこれらを呼び出して、メモリからオブジェクトを破棄します。 デフォルトでは、PHP はオブジェクトのプロパティによって占有されているメモリのみを解放し、オブジェクト関連のリソースを破棄します。 デストラクターを使用すると、オブジェクトの使用後に任意のコードを実行してメモリをクリアできます。

スクリプトがオブジェクトに関連付けられなくなったと PHP が判断すると、PHP デストラクターが呼び出されます。 関数の名前空間内では、関数が戻るときにこれが発生します。 グローバル変数の場合、これはスクリプトの最後に行われます。 オブジェクトを明示的に破棄する場合は、オブジェクトを指す変数に他の値を代入できます。 通常、変数を NULL に割り当てるか、unset を呼び出します。

次の例では、クラスからインスタンス化されたオブジェクトの数を数えます。 Counter クラスはコンストラクターからインクリメントされ、PHP デストラクターでデクリメントされます。

クラスを定義したら、new を使用してこのクラスのインスタンスを作成できます。 クラス定義は設計図であり、インスタンスは組立ラインに配置される部品です。 New はクラスの名前を取得し、そのクラスのインスタンスを返します。 コンストラクターにパラメーターが必要な場合は、new の後にパラメーターを入力する必要があります。

リーリー

プログラムの実行結果:

リーリー

新しい PHP デストラクター インスタンスを作成すると、すべてのプロパティを保存するためのメモリが準備されます。 各インスタンスには、独自の一意のプロパティ セットがあります。 ただし、メソッドはクラスのすべてのインスタンスで共有されます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/752402.html技術記事初めて PHP 言語を学習する友人は、PHP デストラクターについてあまり知らないかもしれません。この記事では、この側面に関連する知識を詳しく説明します。皆さんのお役に立てば幸いです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。