Web/DB プログラミング徹底解説

ホーム > PHP プログラミング > オブジェクトの生成と破棄

オブジェクトの生成と破棄

多くのプログラミング言語にあるように、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 のデストラクタが呼び出されていることが確認できました。