PHPのオブジェクト指向機能でシンプルな機能実装をする。
class SimpleDataObject{
protected $id;public function __construct($id){
$this->id = $id;
}public function set($name, $val){
if(property_exists($this, $name)) $this->{$name} = $val;
else throw new Exception(‘[‘.get_class($this).’]の定義されていないプロパティ[‘.$name.’]にアクセスしました’);
return true;
}public function get($name){
if(property_exists($this, $name)) return $this->{$name};
else throw new Exception(‘[‘.get_class($this).’]の定義されていないプロパティ[‘.$name.’]にアクセスしました’);
return false;
}public function __set($key, $val){
throw new Exception(‘[‘.get_class($this).’]の定義されていないプロパティ[‘.$name.’]にアクセスしました’);
}public function __get($key){
throw new Exception(‘[‘.get_class($this).’]の定義されていないプロパティ[‘.$name.’]にアクセスしました’);
}}
みたいなクラスを作る。
何のことはない、プロパティを保存してset/getで入出力するだけ。 その上、プロパティはidだけ。
これじゃ役に立たないが、継承して
class EstimateDataObject extends SimpleDataObject{
protected $name, $staff_code, $date;
}
のようにすると、parentのset/get機能で、こちらで定義したname/staff_code/dateを操作できる様になる。
親クラスに機能を追加してみる。
public function format($format){
$str = $format;
foreach(get_object_vars($this) as $key => $val){
$str = preg_replace(‘/%’.strtoupper($key).’%/’, $val, $str);
}
return $str;
}
これで、format(“あなたのIDは%ID%です”)とか流すと、「あなたのIDは1です」みたいな挙動をしてくれる。
get_object_varsは、対象オブジェクトのプロパティを列挙するので、EstimateDataObjectでは、%NAME%, %STAFF_CODE%, %DATE%も置換できる様になっている。
同じように、get_object_varsをうまく使うことで、基本クラスの単純な機能で、継承先の機能を回すことが出来る。
(87)