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