定数テーブル

定数テーブルはCZTableクラスで利用できます。メモリ節約上一つの定数テーブルにつき一つの定数テーブルクラスを定義して、クラスとして呼び出して利用することになります。

このようにすることでプログラム実行時に使わないテーブルをメモリ上へ展開しないようにしています。定数テーブルを使用する際にインスタンスを生成する必要があるので若干面倒かもしれませんが、メモリを節約するということで納得していただければと思います。

クラスの実装方法

定数テーブル名をxxxとした場合クラス名はXxxとなり(定数テーブルクラスのプレフィクスを付けるとtableXxx)、クラスファイルは

(app_root)/tables

内にXxx.phpという名前で設置します。定数テーブルのクラスは以下の構造になります。

<?
class tableXxx extends CZTable { 

	public function _construct() { 
		$table = array(
			2010 => 2010,
			2011 => 2011,
			2012 => 2012,
			2013 => 2013,
			2014 => 2014,
		); 
		$this->set($table); 
	} 

}
?>

コンストラクタ_construct()CZTable::set(array $table)を実行して定数テーブルを定義します。

CZTable::set(array $table)
定数テーブル型の連想配列$tableを定数テーブルとして定義します。

以下のようにプログラムによって定数テーブルを生成することも可能です。

<?
class tableYear extends CZTable { 

	public function _construct() { 
		$year_now = date('Y'); 
		$year_from = $year_now - 1; 
		$year_to = $year_now + 1; 
		 
		$table = array(); 
		for ($year = $year_from; $year <= $year_to; ++$year) { 
			$table[$year] = $year; 
		} 
		$this->set($table); 
	} 

}
?>

定数テーブルの利用

定数テーブルはコントローラ、フォーム、モデル、ユーザ定義関数(、設定ファイル)から使用することができます。上記のように定義した定数テーブルを使用するには、現在のクラスからメソッドnewTable(string $name)loadTable(string $name)を呼び出してインスタンスを生成し、そのインスタンスから以下のメソッドで値を取得します。

CZTable::get()
定数テーブル全体を取得します。set()で指定したものと同じテーブル型の連想配列形式で返します。
CZTable::getValue(string $id, $default_value = NULL)
$idで指定したIDに対応する値を返します。形式はset()で定義した連想配列の値の型に依存します。$idに対応する値がない場合$default_valueを返します。

たとえば

 
<?
class ctrlXxx extends CZCtrl { 

	public function actionYyy($prefecture_id = NULL) {
		if ($prefecture) {
			$prefecture_name = $this->newTable('Prefecture')->getValue($prefecture_id);
		}
		$this->addViewVar('prefecture_name', $prefecture_name);
	}

}
?>

となります。

コンストラクタに引数を渡すことも可能で、newTable()loadTable()の第2以降の引数として指定します。

<?
class ctrlXxx extends CZCtrl {

	public function actionYyy() {
			:
		$this->newTable('table1', $id)->get();
			:
	}

}
?>

前後のページ

ページトップへ