我开始研究自动创建数据库访问器的方法。我正在寻找与PHP> = 5.2兼容的东西。我的第一次尝试导致了这个问题:
class FancyPDOBase extends PDO{
///////////////////////////////////////////////////////////////////////////////
////Magic
///////////////////////////////////////////////////////////////////////////////
public function __call($method, $args){
if(preg_match('/get[A-Z]{1}[a-z_]*[A-Z]{1}[a-z_]*By[A-Z]{1}[a-z_]*/',
$method)){
return $this->getFieldByFields($method, $args);
}else if(
preg_match('/get[A-Z]{1}[a-z_]*[A-Z]{1}[a-z_]*[A-Z]{1}[a-z_]*Array/',
$method)
){
return $this->getPairArray($method);
}//Add more expressions here.
}
///////////////////////////////////////////////////////////////////////////////
protected function getFieldByFields($method, $args){
// Create a series of value getters
preg_match('/get([A-Z]{1}.)([A-Z]{1}.)By([A-Z]{1}.*)/', $method,
$matches);
$table = strtolower($matches[1]);
$get = strtolower($matches[2]);
preg_match_all('/[A-Z]{1}[^A-Z]*/', $matches[3], $split);
$where = self::createWhereStatement($split, $args, $table);
$query = "SELECT $get FROM $table $where";
$result = $this->query($query);
if($result){
$r = $result->fetchAll();
if(count($r)==1){
return $r[0][0];
}else{
return $r;
}
}else{
return null;
}
}
//Add more methods here.
}
我很好奇是否有人已经做过这件事或非常相似的事情,所以我不必这样做,但我也很好奇,如果我错过了认为这会有所帮助的事情。 (我的一般想法是,因为它扩展了PDO,当我需要更复杂的东西时,我总是可以回到正常的SQL查询。)
答案 0 :(得分:1)
听起来你正在建立一个ORM的开端。这意味着是时候强制性链接:
http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx