天天看點

PHP 面向對象程式設計 - 構造方法和析構方法1. 構造方法;2. 析構方法。

本篇概要:

  • 1. 構造方法;
  • 2. 析構方法。

1. 構造方法;

  • 構造方法是 PHP5 中出現的一個新的特性,在執行個體化對象的時候自動調用。
  • 在執行個體化的時候可以給類進行一些賦初始值的操作。
# 構造方法文法格式

[修飾符] function __construct([參數]){
		程式體
 }

# 構造的方法的名字是固定的
# 構造方法也是魔術方法的一種
# 在執行個體化時候傳遞的參數,會在構造方法裡被接收到。

# 之前寫過一個 person 類。在現實生活中,每個人都要有名字、年齡、性别。
# 如果在聲明類的時候,就把這幾個成員屬性賦了初始值,
# 那麼執行個體化對象的幾個成員屬性都是相同的值,所有的人都是相同的名字、年齡、性别。這樣是不符合需求的。
# 是以這裡就要用到構造方法,去給每一個成員屬性在每一次執行個體化的時候,賦一個自己特有的值。

           

構造方法執行個體:person.class.php

<?php
class person{
    
    public $name;
    public $age;
    public $gender;

    /**
     * 構造方法 __construct() 是在執行個體化對象時被自動調用
     * 用途:可以用于初始化程式(可以給成員屬性指派,也可以調用成員方法)
     * 文法:[修飾符] function __construct(參數清單...){ 初始化流程 }
     */
    public function __construct($n, $a, $g = '男'){
        $this -> name = $n;
        $this -> age = $a;
        $this -> gender = $g;
        $this -> say();
    }

    public function say(){
        echo "我的名字是:{$this -> name},";
        echo "我的年齡是:{$this -> age},";
        echo "我的性别是:{$this -> gender}。";
    }
}

// 執行個體化對象時要按構造方法的參數去傳對應的值,必傳參數要放在可選參數之前
$person1 = new person("張三", 18);

echo $person1 -> name;
echo "<br />";
echo $person1 -> age;
echo "<br />";
echo $person1 -> gender;
echo "<br />";
$person1 -> say();
echo "<hr />";
$person2 = new person("李四", 30, "女");
echo $person2 -> name;
echo "<br />";
echo $person2 -> age;
echo "<br />";
echo $person2 -> gender;
echo "<br />";
$person2 -> say();
echo "<hr />";
$person3 = new person("王五", 20, "男");
echo $person3 -> name;
echo "<br />";
echo $person3 -> age;
echo "<br />";
echo $person3 -> gender;
echo "<br />";
$person3 -> say();

           

2. 析構方法。

  • 與構造方法相對應的就是析構方法,析構方法是在對象被銷毀時,被自動調用的一個方法。
  • 用途很多,可以進行一些資源操作中的釋放資源、以及檔案操作中的關閉檔案。或者說如果有一些使用者資訊,你想在最後儲存一下,如果你想讓使用者去點一些儲存的按鈕,可能使用者不會去操作。那我們就可以用析構方法,把這些儲存的流程寫到析構方法中。
# 析構方法方法格式

[修飾符] function __destruct([參數]){
		程式體
 } 
 
           

析構方法執行個體:person.class.php

<?php
class person{
    
    public $name;
    public $age;
    public $gender;
    
	// 注意:成員屬性 $name 和 構造方法形參 $name 是不同的
    public function __construct($name, $age, $gender){
        $this -> name = $name;
        $this -> age = $age;
        $this -> gender = $gender;
    }

    public function say(){
        echo "say";
    }

    /**
     * 析構方法 __destruct() 是在對象被銷毀時自動調用
     * 用途:可以進行資源的釋放操作或檔案的關閉操作或資訊儲存操作
     * 注意:棧記憶體的先進後出
     */
    public function __destruct(){
        echo "88{$this -> name}<br />";
    }
}

$person = new person("zhangsan", 18, 'female');
$person -> say();
echo "<hr />";
$person1 = new person("lisi", 20, "male");
$person1 -> say();

           
# 輸出

say
--------------------
say88lisi
88zhangsan

# 原了解釋
# 和記憶體操作(出棧,入棧)有關。它是一種“棧記憶體”的操作,先進後出。
# 析構方法是在對象銷毀的時候執行。是在什麼時候銷毀對象?是在**腳本執行完**才會銷毀。