KT客棧

Web程式交流 & 聊幹畫 / 心情手札

【PHP】7物件導向-7.2 建構子&解構子方法

*PHP  7物件導向-7.2


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; //設為空值後就不再是資料庫物件
  }
}

?>




沒有留言:

張貼留言

@templatesyard