天天看點

PHP構造函數和析構函數

構造函數

__construct()      

  PHP 允許開發者在一個類中定義一個方法作為構造函數。具有構造函數的類會在每次建立新對象時先調用此方法,是以非常适合在使用對象之前做一些初始化工作。

class Car
{
    function __construct()
    {
        echo "這是構造函數" . "<br>";
    }
}
// 建立對象時會調用__construct()
$car = new Car();   // 這是構造函數      

  如果子類中定義了構造函數則不會隐式調用其父類的構造函數。要執行父類的構造函數,需要在子類的構造函數中調用 parent::__construct()。如果子類沒有定義構造函數則會如同一個普通的類方法一樣從父類繼承(假如沒有被定義為 private 的話)。

class BaseClass
{
    function __construct()
    {
        echo "這是父類構造函數" . "<br>";
    }
}
 
class SubClass extends BaseClass
{
    function __construct()
    {
        parent::__construct();
        echo "這是子類構造函數" . "<br>";
    }
}
 
//這是父類構造函數
//這是子類構造函數
$subClass = new SubClass();      

析構函數

__destruct()      

  析構函數會在到某個對象的所有引用都被删除或者當對象被顯式銷毀時執行。

  和構造函數一樣,父類的析構函數不會被引擎暗中調用。要執行父類的析構函數,必須在子類的析構函數體中顯式調用 parent::__destruct()。此外也和構造函數一樣,子類如果自己沒有定義析構函數則會繼承父類的。

class Car
{
    function __construct()
    {
        echo "這是構造函數" . "<br>";
    }
 
 
    function __destruct()
    {
        // TODO: Implement __destruct() method.
        echo "這是析構函數" . "<br>";
    }
}
 
$car1 = new Car();
echo "----------------------" . "<br>";
$car2 = new Car();
echo "______________________" . "<br>";
 
這是構造函數
----------------------
這是構造函數
______________________
這是析構函數
這是析構函數