構造函數

構造函數是類中的一個特殊函數,當使用 new 動作符建立一個類的案例時,構造函數將會自動呼叫。當函數與類同名時,這個函數將成為構造函數。若果一個類沒有構造函數,則呼叫基類的構造函數,若果有的話。

<?php
class Auto_Cart extends Cart {
    function 
Auto_Cart() {
        
$this->add_item ("10"1);
    }
}
?>

上文定義了一個 Auto_Cart 類,即 Cart 類加上一個構造函數,當每次使用「new」建立一個新的 Auto_Cart 類案例時,構造函數將自動呼叫並將一件商品的數目起始化為「10」。構造函數可以使用參數,而且這些參數可以是可選的,它們可以使構造函數更加有用。為了依然可以不帶參數地使用類,所有構造函數的參數應該提供預設值,使其可選。

<?php
class Constructor_Cart extends Cart {
    function 
Constructor_Cart($item "10"$num 1) {
        
$this->add_item ($item$num);
    }
}

// 買些同樣的無聊老貨
$default_cart = new Constructor_Cart;
// 買些實在貨...
$different_cart = new Constructor_Cart("20"17);
?>

也可以使用 @ 動作符來抑制發生在構造函數中的錯誤。例如 @new

<?php
class A
{
    function 
A()
    {
      echo 
"I am the constructor of A.<br>\n";
    }

    function 
B()
    {
        echo 
"I am a regular function named B in class A.<br>\n";
        echo 
"I am not a constructor in A.<br>\n";
    }
}

class 
extends A
{
    function 
C()
    {
        echo 
"I am a regular function.<br>\n";
    }
}

// 呼叫 B() 作為構造函數
$b = new B;
?>

類 A 中的函數 B() 將立即成為類 B 中的構造函數,雖然並不是有意如此。PHP 4 並不關心函數是否在類 B 中定義的,或是是否被繼承來的。

注意

PHP 4 不會從派生類的構造函數中自動呼叫基類的構造函數。恰當地逐次呼叫上一級的構造函數是會員的責任。

析構函數是一種當物件被銷毀時,無論使用了 unset() 或是簡單的脫離範圍,都會被自動呼叫的函數。PHP 中沒有析構函數。可以用 register_shutdown_function() 來替代模擬大多數析構函數的效果。