[PHP] : Singleton
Singletonクラス
class singleton {
private static $instance_ = null;
private function __construct() {
echo "make instance \n";
}
public static function getInstance() {
if( is_null( self::$instance_ ) ) {
self::$instance_ = new singleton();
}
return self::$instance_;
}
}
client
外部のclientからnewをしようとするとerrorになる。
インスタンスを取得する場合はクラスメソッドのgetInstance()を利用する。
//error
$instance = new singleton(); //ここはエラーになる。
//success
$instance = singleton::getInstance();
PHPのvalidate処理実装
validate処理
- frameworkには必ずといっていいほど含まれているvalidate処理。独自に簡単な処理を書いてみた。
- validateは処理の型が決まっているので、interfaceを用意し、個別のvalidateクラスを実装する。
interface
validateのinterfaceを定義
interface Validate {
public function execute( $param, $format );
}
各validate処理
interfaceで定義したexecuteメソッドの本実装を行う。ここではStirng,Length,Regexを定義するが同様にクラスを追加すれば簡単にvalidateが実装できる。
class StringValidate implements Validate {
public function execute( $param, $flag ) {
if( is_string( $param ) !== $flag ) {
return false;
}
return true;
}
}
class LengthValidate implements Validate {
public function execute( $param , $length ) {
if( mb_strlen( $param ) > $length ) {
return false;
}
return true;
}
}
class RegexValidate implements Validate {
public function execute( $param , $regex ) {
if( !preg_match( $regex, $param ) ) {
return false;
}
return true;
}
}
validateManager
clientから呼び出され、各validateのexecuteメソッドを呼び出す。
class ValidateManager {
static private $params_ = array();
static public function init() {
//本来はここで$_POSTなどから取得する
self::$params_ = array( 'aaaa' => 'sampletest' );
}
static public function execute( $form ) {
self::init();
foreach( $form as $key => $valide ) {
foreach( $valide as $type => $format ) {
$class = ucfirst( $type ) . 'Validate';
$value = self::$params_[ $key ];
$result = $class::execute( $value, $format );
if( $result === false ) {
echo "ERROR $type \n";
return false;
}
}
}
return true;
}
}
clientプログラム
必要なvalidateの定義を行ない、validateManagerクラスに渡す。validateの定義を配列で行っているが設定ファイルから呼び出す方針に変更も可能。
//client
$form = array( 'aaaa' => array( 'String' => TRUE,
'Length' => 15,
'Regex' => '/\w.*/i' ) );
// 実行
$stat = ValidateManager::execute( $form );
if( $stat ) {
echo "TRUE \n";
} else {
echo "FALSE \n";
}