PHP de オブジェクト指向機能

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)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP], PHP   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です