ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

PHPの動的言語機能に驚いた話

スポンサードリンク

http://www.flickr.com/photos/27403767@N00/2218075860
photo by Scott Beale


こんなこともできるんだ! すごいPHPシリーズ(続きません。)


大体のプログラム言語は、変数に格納した値をクラスとして使用するには、evalやら特別なステップが必要だった覚えがありました。(勝手な認識なので、異論は認めます。。。)


しかし、PHPは動的に処理することができる。パネェ(°Д°;

CakePHPで、バリデーションを複数実行しようとしたんですが、個別に何度も複数の記述が必要だったのでメソッドに纏めようとした。


ただ、動的に関数呼び出しができないと組めなかったので、調べてみたらあっさり出来た(というお話でした)

  • CakePHPで動的機能を試してみた
<?php
/**
 * バリデーションのチェックメソッド
 */
private function checkValidate($model_name, $val_error) {
	// ここが動的言語機能
	if(! $this->$model_name->validates()){
		$this->log('バリデーションでのエラー' . print_r($val_error, true), LOG_INFO);
		return false;
	}
	return true;
}
/**
 * バリデーションでエラーが発生していないか、確認する
 * このメソッドを実行する前に一度、評価データをモデルへsetする必要があります。
 */
private function checkAllValidate() {
	// バリデートしたいモデルを増やしたい場合はここに追加
	$validateErrorArray = array(
		'TestModel' => $this->TestModel->validationErrors,
		'TestModel2' => $this->TestModel2->validationErrors,
	);
	$resultBool = true;

	// バリデーションにエラーが格納されいないかチェック
	foreach ($validateErrorArray as $key => $val_error) {
		if (! $this->checkValidate($key, $val_error)) {
			$resultBool = false;
		}
	}
	return $resultBool;
}


ふーむ。便利。