Otomatik olarak PDO kullanarak erişim yöntemlerinin oluştururken, __ çağrı ve preg_match

0 Cevap php

I started working on a way to automate creation of my database accessors. I am looking for something compatible with PHP >= 5.2. My first go at it resulted in this:

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.
}

Zaten bu da çok benzer bir şey yapmış, bu yüzden gerek yok birisi varsa ben merak ediyorum, ama bu yararlı olacağını düşünerek bir şey cevapsız varsa ben de merak ediyorum. (Benim genel düşünce bu PDO'yu uzanır çünkü ben daha karmaşık bir şey gerektiğinde ben hep geri normal bir SQL sorgusu düşebilir olmasıdır.)

0 Cevap