PHP4.x 版本:
PHP 4.x 的建構函式名稱與類別名稱相同。
子類別的建構函式名稱與子類別名稱相同(廢話)。
在子類別裡父類別的建構子不會自動執行。
要在子類別裡執行父類別的建構函數,必須執行類似以下語句:
$this->[父類別的建構子名稱()]
class base1 {
) {
echo 'this is base1 construct';
}}
class class1 extends base1 {
function class1() { is class1 construct';
}
}$c1 = new class1;
PHP5.x 版本:
PHP5.0 以上版本對類別的功能進行了很大的擴充。類別的建構子統一命名為__construct()。
子類別的建構函式名稱也是__construct()(也是廢話)。
在子類別裡父類別的建構子會不會執行,分兩種情況:
1、如子類別不定義建構子__construct(),則父類別的建構子預設會被繼承下來,且會自動執行。
2、如子類別定義了建構子類別 __construct(),因為建構子名稱也是__construct(),所以子類別的建構子其實是覆蓋(override)了父類別的建構子。這時執行的是該子類別的建構子。
這時如果要在子類別裡執行父類的建構函數,必須執行類似以下語句:
parent::__construct();
class base2 {
function __confer echo 'this is base2 construct';}
function __destruct() {}}
class class2 extends base2 {
function __(); echo 'this is class2 construct';
}}
注意parent::__construct(); 語句不一定必須放在子類別的建構子中。放在子類別的建構函式中僅僅保證了其在子類別被實例化時會自動執行。
PHP4.0 和 5.0 類別建構子的相容問題:在 PHP5.0 以上版本裡,也相容了 4.0 版本的建構子的定義規則。如果同時定義了4.0的建構子和 __construct()函數,則__construct() 函數優先。
為了讓類別程式碼同時相容PHP4.0 和5.0,可以採取以下的方式:class class3 {
function __construct() //for PHP5.0
{
';
}function class3() //for PHP4.0