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を継承してプロパティを増やしたクラスもこのコードで対応できたりする。
便利便利
(92)