php __call()方法實現數據庫連貫操做

使用__call()方法來實現數據庫連貫操做 <?php  // 使用__call()方法來實現數據庫連貫操做  // 申明一個Db類(數據庫操做類)的簡單操做模型 class Db{    private $sql = array(       "field" => "",       "where" => "",       "order" => "",       "limit" => "",       "group" => "",       "having" => "",    );        // 連貫操做調用field() where() order() limit() group() having()方法,組合sql語句    function __call($methodName,$args){       // 將第一個參數(表明不存在方法的方法名稱),所有轉成小寫方式,獲取方法名稱       $methodName = strtolower($methodName);              // 若是調用的方法名和成員屬性數組$sql下標對應上,則將第二個參數給數組中下標對應的元素       if(array_key_exists($methodName,$this->sql)){          $this->sql[$methodName] = $args[0];       }else{          echo '調用類'.get_class($this).'中的方法'.$methodName.'()不存在';       }       // 返回本身對象,則能夠繼續調用本對象中的方法,造成連貫操做       return $this;    }    // 輸出連貫操做後組合的一個sql語句,是連貫操做最後的一個方法    function select(){       echo "SELECT {$this->sql['field']} FROM user {$this->sql['where']} {$this->sql['order']} {$this->sql['limit']} {$this->sql['group']}             {$this->sql['having']}";    } } $db = new Db(); // 連貫操做 $db->field('sex, count(sex)')   ->where('where sex in ("男","女")')   ->group('group by sex')   ->having('having avg(age) > 25')   ->select(); ?>
相關文章
相關標籤/搜索