オブジェクトの生成と破棄
多くのプログラミング言語にあるように、PHP でもコンストラクタとデストラクタを定義できます。
それぞれのメソッド名は、__construct、__destruct です。C++ のようにクラス名が付いてこないので気をつけてください。
前回作った単純なクラス、Car クラスにコンストラクタとデストラクタを追加して、その動作確認をしてみましょう。 動作がわかりやすいように、追加するコードはただのデバッグトレースを出力するだけにします。
<?php class Car { private $_name; public function __construct() { echo 'Car::__construct<br>'; } public function __destruct() { echo 'Car::__destruct<br>'; } public function getName() { return $this->_name; } public function setName($n) { if(!is_string($n) || strlen($n) == 0){ throw Exception("Invalid name value."); } $this->_name = $n; } } ?>
このクラスのテストコードを次のようにします。スコープを抜けた時にデストラクタが呼び出されることがわかるように、 foo という名前のメソッドの中で Car を生成しています。foo を抜けた時に、$car のスコープからはずれ、そこで デストラクタが呼び出されることを確認しましょう。
<?php require_once( 'class.car.php' ); echo 'Calling foo()<br>'; foo(); echo 'Back from foo()<br>'; function foo() { $car = new Car(); $car->setName('Sienna'); echo $car->getName() . '<br>'; } ?>
このテストの結果は次のように出力されました。
Calling foo() Car::__construct Sienna Car::__destruct Back from foo()
この出力の通り、foo から呼び出し元に帰る前に $car のデストラクタが呼び出されていることが確認できました。