➤7物件導向-7.2 建構子方法
本篇要來說明建構子方法__construct()以及解構子方法__destruct()。
*建構子方法__construct():
主要用於啟動session、資料庫連線,會在建立物件時自動執行其內容。可輸入參數,但參數值需要放在new類別的後方。
(如下所示....以下文字純屬娛樂無詆毀任何國家領導人意思)
|--物件名 = new 類別名(妳要塞入的參數);
|
|--$book_a = new book("中國1", "維尼熊", "頁數:200");
換言之,建構子就是當類別被實例化(建立物件)以後,會自動執行的一個方法
*解構子方法__destruct():
主要用於關閉session、釋放連線資源,會在結束物件後自動執行。不能輸入參數。
範例如下($book_b物件所傳入的參數會替換掉原先的值):
<?php
class book { //類別
var $title; //定義類別的屬性
var $writer;
var $pages;
//建構子,可設參數但無回傳值(多數用於連線)
function __construct($ktitle, $kwriter, $kpages){
echo "---上架--- <br>";
$this->title = $ktitle; //將傳入的參數指定給類別的屬性值($this是虛擬變數(即物件本身),再指向屬性)
$this->writer = $kwriter;
$this->pages = $kpages;
}
//自訂方法
function showpage(){
echo $this->title."<br>";
echo $this->writer."<br>";
echo $this->pages."<br>";
}
//解構子(可用於關閉資料連線、關閉session等,無法設參數也無法設回傳)
function __destruct(){
echo "---下架--- <hr>";
}
}
//物件名 = new 類別名(方法的參數值)
//物件名加上->運算子,並指定屬性名稱來存入"值"
//加入null空值,需先清除物件才能秀出解構子的訊息,否則會到整個頁面結束才執行
$book_a = new book("中國1", "維尼熊", "頁數:200"); //建立$book_a的物件
$book_a->title = "被河蟹的故事";
$book_a->writer = "習大大";
$book_a->pages = "200頁";
$book_a->showpage();
$book_a = NULL;
//更新為傳入的參數值來代替,對照一下上方的__construct()
$book_b = new book("中國2", "習禁評", "頁數:100"); //建立$book_b的物件
$book_b->ktitle = "扛200斤麥子不換肩的傳奇";
$book_b->kwriter = "習包子";
$book_b->kpages = "100頁";
$book_b->showpage();
$book_b = NULL;
?>
連線資料庫範例(個人覺得小規模網站不太需要連線還要寫到物件,或是您也可以用框架會更好):
#資料庫連線頁為父類,我們可以在子類別來繼承使用
class blog extends DBconnect{ }
#在子類別中的方法,使用$this->connect()就可以連線。
$this->connect()->prepare("SELECT * FROM class.students");
<?php
class DBconnect {
private $server;
private $username;
private $passwd;
private $db;
private $charset;
public function __construct() {
$this->server = "localhost";
$this->username = "root";
$this->passwd = "你的密碼";
$this->db = "class";
$this->charset = "utf8mb4";
}
public function connect() {
try {
$dsn = "mysql:server=".$this->server. ";db=".$this->db. ";charset=".$this->charset;
$pdo = new PDO($dsn, $this->username, $this->passwd); //PDO類別建立資料庫物件
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //秀出錯誤、異常訊息
return $pdo;
} catch (PDOException $e) {
echo "連線失敗: ".$e->getMessage(); //有錯誤catch會抓出PDOException物件丟出訊息
}
}
public function __destruct() {
$pdo = null; //設為空值後就不再是資料庫物件
}
}
?>
沒有留言:
張貼留言