PHPデストラクターを正しく理解する方法
クラス内でconstructという名前の関数を宣言すると、この関数はコンストラクター
とみなされ、オブジェクトインスタンスの作成時に実行されることを明確にしてください。他の関数と同様に、コンストラクターには、オブジェクトを作成するクラスを定義し、そのすべてのプロパティをステートメントに含めることができます。 PHP が呼び出す前に、この関数を定義することもできます。オブジェクトは破棄されます。これは PHP デストラクターと呼ばれます。継承は、クラス (サブクラス/派生クラス) の別の関数を継承できます。基本クラスのすべての プロパティとメソッド
を追加でき、また、基本クラスのメソッドとプロパティをオーバーライドすることもできます。3.1.2 に示すように、extends キーワードを使用できます。 コンストラクターが他のメソッドとともに継承される場合、どのように継承されるのか疑問に思うかもしれません。 オブジェクトの作成時に実行されます
。この関数が必要な場合は、次を使用する必要があります。 : 演算子は第 2 章で説明されています。これを使用すると、名前空間 を指すことができます。parent: :construct を使用して親クラスのコンストラクターを呼び出すことができます
。 PHP の以前のバージョンでも同じことが当てはまり、このメソッドは引き続き機能します。つまり、クラスに Animal という名前を付け、その中に Animal という名前のメソッドを作成すると、このメソッドがコンストラクターになります。クラスには construt コンストラクターと、クラスと同じ名前の関数の両方が含まれます。PHP はコンストラクターをコンストラクターとして扱います。これにより、PHP バージョンで作成された以前のクラスを引き続き使用できますが、新しいスクリプト (PHP5) を使用する必要があります。 construct.
PHP の新しいコンストラクター宣言方法を使用すると、コンストラクターが属するクラスに関係なく、コンストラクターに一意の名前を付けることができます。このように、クラスの名前を変更するときに、名前を変更する必要はありません。コンストラクターの名前を変更する必要があります。
他のクラス メソッドと同様に、コンストラクターにアクセス メソッドを与えると、特定の範囲内でオブジェクトをインスタンス化する機能が可能になります。
PHP デストラクターは、コンストラクターではなく、パターンを呼び出してメモリからオブジェクトを破棄します。デフォルトでは、PHP はオブジェクトのプロパティによって占有されているメモリのみを解放し、オブジェクトに関連付けられたリソースを破棄します。オブジェクトの使用後に任意のコードを実行してメモリをクリアできるようにします。
スクリプトがオブジェクトに関連していないと PHP が判断すると、関数が返されるときに PHP デストラクターが呼び出されます。グローバル変数の場合、これはスクリプトの最後で行われます。オブジェクトを明示的に破棄する場合は、通常、変数を NULL に割り当てるか、unset を呼び出します。 、クラスからインスタンス化されたオブジェクトの数をカウントします。Counter クラスはコンストラクターから増加し、PHP デストラクターで減少します。
クラスを定義したら、 new を使用してクラスのインスタンスを作成できます。クラスは設計図面であり、インスタンスはアセンブリ ラインに配置されるコンポーネントです。 New にはクラスの名前が必要で、コンストラクターにパラメーターが必要な場合は、 new.
1 < ?php 2 3 class Counter { private static $count = 0; 4 5 function construct() { self::$count++; } 6 7 function destruct() { self::$count--; } 8 9 function getCount() { return self::$count; } } 10 11 //建立第一个实例 12 13 $c = new Counter(); 14 15 //输出1 16 17 print($c->getCount() . "<br>\n"); 18 19 //建立第二个实例 20 21 $c2 = new Counter(); 22 23 //输出2 24 25 print($c->getCount() . "<br>\n"); 26 27 //销毁实例 28 29 $c2 = NULL; 30 31 //输出1 32 33 print($c->getCount() . "<br>\n"); 34 35 ?>
新しい PHP デストラクター インスタンスを作成すると、すべてのプロパティを保存するためのメモリが準備されます。ただし、メソッドはクラスのすべてのインスタンスで共有されます。クラス内のコンストラクターとしてメソッドを定義します。コンストラクターを持つクラスは、新しいオブジェクトが作成されるたびにこのメソッドを呼び出すため、オブジェクトを使用する前に初期化作業を行うのに非常に適しています。
注:コンストラクターがサブクラスで定義されている場合、その親クラスのコンストラクターは暗黙的に呼び出されません。親クラスのコンストラクターを実行するには、子クラスのコンストラクターで
parent::construct() を呼び出す必要があります。サブクラスでコンストラクターが定義されていない場合、通常のクラス メソッドと同様に親クラスから継承されます (プライベートとして定義されていない場合)。例 #1 新しい標準コンストラクターの使用<?phpclass BaseClass {
function construct() {
print "In BaseClass constructor\n";
}
}class SubClass extends BaseClass {
function construct() {
parent::construct();
print "In SubClass constructor\n";
}
}class OtherSubClass extends BaseClass {
// inherits BaseClass's constructor}
// In BaseClass constructor$obj = new BaseClass();
// In BaseClass constructor
// In SubClass constructor$obj = new SubClass();
// In BaseClass constructor$obj = new OtherSubClass();?>
与其它方法不同,当 construct() 被与父类 construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT
错误信息。
自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。
Example #2 Constructors in namespaced classes
<?php namespace Foo; class Bar { public function Bar() { // treated as constructor in PHP 5.3.0-5.3.2 // treated as regular method as of PHP 5.3.3 } } ?>
void destruct ( void )
PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
Example #3 析构函数示例
<?php class MyDestructableClass { function construct() { print "In constructor\n"; $this->name = "MyDestructableClass"; } function destruct() { print "Destroying " . $this->name . "\n"; } }$obj = new MyDestructableClass();?>
和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。
析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。
以上がPHPデストラクタのサンプルコード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。