早期在每個 Model 方法裡都要:
mysql_connect() 建立連接mysql_close() 關閉連接方法一多,連接/關閉代碼到處複製,維護極其痛苦。
__construct() / __destruct() 自動管理連接生命週期<?php
class TestTable {
private $con;
// 構造函數:自動連接、選庫、設編碼
public 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");
}
// 業務查詢方法:專注 SQL,無需關心連接
public function getAll() {
$result = mysql_query("SELECT * FROM testtable ORDER BY date DESC");
$list = [];
while ($row = mysql_fetch_array($result)) {
$list[] = [
'id' => $row['id'],
'username' => $row['username'],
'number' => $row['number'],
'date' => $row['date']
];
}
return $list;
}
// 析構函數:腳本結束自動關閉連接
public function __destruct() {
mysql_close($this->con);
}
}
?>
<?php
header("Content-Type: text/html; charset=utf-8");
include_once("model.php");
$model = new TestTable("test");
$data = $model->getAll(); // 直接查詢,連接自動管理
echo "<table>";
foreach ($data as $row) {
echo "<tr><td>{$row['id']}</td><td>{$row['username']}</td><td>{$row['number']}</td><td>{$row['date']}</td></tr>";
}
echo "</table>";
?>
__destruct() 保證連接關閉,防洩漏。請棄用 mysql_* 系列函數**(PHP 7.0+ 已移除),改用 PDO** 或 **MySQLi**:
核心思想不變:封裝連接生命週期,讓業務代碼回歸純粹。