セクション 4 - コンストラクターとデストラクター
__construct という名前の関数をクラスで宣言すると、この関数はオブジェクト インスタンスの作成時にコンストラクターとして扱われ、実行されます。つまり、__ は 2 つのアンダースコアです。他の関数と同様に、コンストラクターにはパラメーターまたはデフォルト値を含めることができます。オブジェクトを作成し、そのすべてのプロパティをステートメントに入れるクラスを定義することもできます。これは、PHP がオブジェクトの前に呼び出すものです。それはデストラクターと呼ばれます。
継承はクラス (サブクラス/派生クラス) の機能を継承することができます。 3.1.2 に示すように、extends キーワードを使用してクラスを拡張できます。
コンストラクターが他のメソッドとともに継承される場合、オブジェクトの作成時にどのように継承されるのか疑問に思われるかもしれません。
この関数が必要な場合は、第 2 章で説明した :: 演算子を使用する必要があります。名前空間を指すことができます。parent::__construct を使用して、親クラスのコンストラクターを呼び出すことができます。
一部のオブジェクト指向言語では、クラスの後にコンストラクターの名前を付けます。これは PHP の以前のバージョンにも当てはまり、このメソッドは引き続き機能します。つまり、クラスに Animal という名前を付け、同様に Animal という名前のメソッドを作成した場合、クラスに __construt コンストラクターと __construt コンストラクターの両方がある場合、このメソッドはコンストラクターになります。クラスと同じ名前の関数を使用すると、PHP は __construct をコンストラクターとして扱います。これにより、PHP バージョンで作成された以前のクラスを引き続き使用できますが、新しいスクリプト (PHP5) では __construct の新しいメソッドを使用する必要があります。コンストラクターを宣言すると、そのコンストラクターが属するクラスに関係なく、コンストラクターに一意の名前を付けることができます。このように、クラスの名前を変更するときに、コンストラクターの名前を変更する必要はありません。
他のクラス メソッドと同様に、コンストラクターにアクセス メソッドを与えることができます。このアクセス メソッドは、スコープ内でオブジェクトをインスタンス化する機能に影響を与えます。コンストラクターではなく、
デストラクターなど。デフォルトでは、PHP はオブジェクトのプロパティによって占有されているメモリを解放し、そのオブジェクトに関連付けられたリソースを破棄するだけです。オブジェクトの使用後に任意のコードを実行してメモリをクリアします。
スクリプトがオブジェクトに関連していないと判断すると、関数の名前空間内でデストラクターが呼び出され、関数が返されるときにこれが行われます。これはスクリプトの最後で行われます。オブジェクトを明示的に破棄したい場合は、その他の値を割り当てることができます。通常、変数に NULL を割り当てるか、unset を呼び出します。
次の例では、オブジェクトからインスタンス化されたオブジェクトの数を数えます。 Counter クラスはコンストラクターから値が増加し始め、デストラクターで減少します。
クラスを定義したら、new を使用してクラスのインスタンスを作成できます。クラスの定義はブループリントであり、インスタンスはアセンブリ ラインに配置されるコンポーネントです。 New はクラスの名前を取得し、そのクラスのインスタンスを返します。コンストラクターにパラメーターが必要な場合は、new.
<?php class Counter { private static $count = 0; function __construct() { self::$count++; } function __destruct() { self::$count--; } function getCount() { return self::$count; } } //建立第一个实例 $c = new Counter(); //输出1 print($c->getCount() . "<br> "); //建立第二个实例 $c2 = new Counter(); //输出2 print($c->getCount() . "<br> "); //销毁实例 $c2 = NULL; //输出1 print($c->getCount() . "<br> "); ?>