PHP de オブジェクト指向 Part.2

PHP de オブジェクト指向part.2

この間のクラスに機能を追加してみる。

class SimpleDataObject
追記・変更

protected $_mask;

public function __construct($id){
$_mask[] = ‘id’;
foreach(get_object_vars($this) as $key => $val){
if(strpos($key, ‘_’)===0) $this->_mask[] = $key;
}
$this->id = $id;
}

public function getColumns(){
$ret = array();
foreach(get_object_vars($this) as $key => $val){
if(in_array($key, $this->_mask)) continue;
$ret[] = $key;
}
return $ret;
}

public function setByArray($array){
foreach($array as $key => $val){
try{
$this->set($key, $val);
}catch(Exception $e){
throw new Exception(‘[‘.__FUNCTION__.’]エラー:’.$e->getMessage());
}
}
return true;
}

で、前回作ったEstimateDataObjectを使って

$obj = new EstimateDataObject(1);
$cols = $obj->getColumns();
$sql = ‘SELECT ‘.implode(‘,’, $cols).’ FROM Estimates WHERE id=’.$obj->get(‘id’).’;’;
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
$obj->setByArray($row);

こんな事をすると、EstimateDataObjectで定義した変数を列挙したSQL文を作って$objに読み込むことが出来る。
で、これを更新保存するには、

$obj->set(‘name’, $_GET[‘name’]);
$sql = ‘UPDATE Estimates SET’;
foreach($cols as $col){
$sql .= ‘ '.$col.'=’.$obj->get($col).’,’;
}
$sql = rtrim($sql, ‘,’);
$sql .= ‘ WHERE id=’.$obj->get(‘id’);
mysql_query($sql);

みたいなことで出来る。
EstimateDataObjectだけでなく、SimpleDataObjectを継承してプロパティを増やしたクラスもこのコードで対応できたりする。
便利便利

(83)


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

コメントを残す

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