使用__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(); ?>