【php】利用php的建構函式與解構函式編寫Mysql資料庫查詢類,建構函式mysql
上次在《【php】利用原生態的JavaScript Ajax為php進行MVC分層設計,相容IE6》(點擊開啟連結)一文中,對於php查詢Mysql資料庫的model.php寫法還不夠完善,在每一個方法中還需要自己聲明mysql的$con對象,同時自己關閉mysql的$con對象。這樣,如果查詢方法一多,再無緣無故地增加了許多聲明$con對象與關閉$con對象的代碼。其實完全可以利用php的建構函式與解構函式給資料庫類各個查詢方法的注入$con對象,同時自動在每次查詢之後自動回收$con對象。
直接舉一個例子說明這個問題,首先我們的任務很簡單,就是把mysql中test資料庫的testtable表,按date時間類降序排序的結果查詢到網頁上。
如:
首先,我們編寫一個model.php如下,
先聲明一個私人的類成員$con作為這個類的全域變數。
可以把建立資料庫連接的代碼放在testtable這個資料庫查詢類的建構函式__construct()裡面,把關閉資料庫連接的代碼放在解構函式__destruct()裡面,其中__construct()與__destruct()是php中的函數名保留關鍵字,也就是一旦聲明這兩個函數,就被認為是建構函式與解構函式。
值得注意的是,為聲明的私人類成員$con賦值,必須用$this->con的形式。不可以直接$con=xx,如果是$con=xx,php認為這個變數的作用範圍僅在當前函數內,不能作用於整個類。
建構函式,要求一個變數$databaseName,此乃調用者需要查詢的資料庫名。
<?phpclass testtable{ private $con; function __construct($databaseName){$this->con=mysql_connect("localhost","root","root"); if(!$this->con){ die("串連失敗!"); } mysql_select_db($databaseName,$this->con); mysql_query("set names utf8;"); }public function getAll(){ $result=mysql_query("select * from testtable order by date desc;"); $testtableList=array(); for($i=0;$row=mysql_fetch_array($result);$i++){$testtableList[$i]['id']=$row['id'];$testtableList[$i]['username']=$row['username']; $testtableList[$i]['number']=$row['number']; $testtableList[$i]['date']=$row['date']; } return $testtableList; }function __destruct(){mysql_close($this->con); }}?>
搞完之後,getAll()這個資料庫查詢類的查詢方法,無須聲明資料庫連接與關閉資料庫連接,直接就可以進行查詢,查詢完有解構函式進行回收。
在controller.php中先引入這個testtable查詢類,再進行getAll()方法的調用,則得到如的效果:
<?phpheader("Content-type: text/html; charset=utf-8"); include_once("model.php"); $testtable=new testtable("test"); $testtableList=$testtable->getAll();echo "<table>";for($i=0;$i<count($testtableList);$i++){ echo "<tr><td>".$testtableList[$i]['id']."</td><td>".$testtableList[$i]['username']."</td><td>".$testtableList[$i]['number']."</td><td>".$testtableList[$i]['date']."</td></tr>"; } echo "</table>";?>