ユーザ定義関数

フレームワークやPHPの関数にない処理などをユーザ定義関数の形で実装することが可能です。処理は基本的にアクションで記述しますが、中にはアクションに一対一対応しないものもあります。たとえば複数のアクションで頻繁に発生する共通処理がある場合や、PCと携帯でアクションが異なるが共通の処理をしたい場合などです。こういった場合に個別のアクションに同じ処理のコードを書くのを避けるために一連の処理をユーザ定義処理(関数)として記述することも可能です。

Funcクラスを拡張したユーザ定義関数専用クラスを作り、そのメソッドとして関数を記述していきます。関数を使用するときにそのクラスを呼び出し(インスタンスを生成し)、メソッドを実行する形をとります。

このようにすることでプログラム実行時に使わない関数をメモリ上へ展開しないようにしているのです。ユーザ定義関数をわざわざクラスの形でメソッドとして定義し、呼び出す際にインスタンスを生成するというのは若干面倒かもしれませんが、メモリを節約するということで納得していただければと思います。

したがってすべての関数を一つのクラスで定義するのではなく、頻繁に使用する組み合わせや機能グループに基づいてクラスを適宜分割して関数を記述することを推奨します。メモリを最大限に節約したい場合は一つのクラスで一つの関数を定義する形をとってください。

ユーザ定義関数の実装方法

クラス名をXxxとすると(ユーザ定義関数クラスのプレフィクスを付けるとfuncXxx)、クラスファイルは

(app_root)/funcs

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

<?
class funcXxx extends CZFunc { 
	public function yyy() { 
		$x = ...
		return $y;
	} 

}
?>

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

<?
class ctrlZzz extends CZCtrl {

	public function actionZzz() {
		$y = $this->newFunc('Xxx')->yyy();
			:
	}

}
?>

インスタンスを保持するかどうかでnewFunc()loadFunc()を使い分けますが、通常はnewFuncで結構です。

引数も指定できます。機能グループごとでクラスを分けたりメソッド_construct()でコンストラクタを設定したりすることも可能です。コンストラクタに引数を渡すこともできますが、その場合newFunc()loadFunc()の第2以降の引数として指定します。

前後のページ

ページトップへ