標籤:des style color io ar for sp 問題 cti
今天看ecshop源碼的時候發現 建構函式是和類名一樣,以前沒接觸過,一下子疑惑啦
HP4.x 版本:
PHP 4.x 的建構函式名與類名相同。
注意:在子類裡父類的建構函式不會自動執行。
要在子類裡執行父類的建構函式,必須執行類似以下語句:
$this->[父類的建構函式名()]
例如:
class base1
{
function base1()
{
echo ‘this is base1 construct‘;
}
}
class class1 extends base1
{
function class1()
{
$this->base1();
echo ‘this is class1 construct‘;
}
}
$c1 = new class1;
PHP5.x 版本:
PHP5.0 以上版本對類的功能進行了很大的擴充。類的建構函式統一命名為__construct()。
在子類裡父類的建構函式會不會執行,分兩種情況:
1,如子類不定義建構函式 __construct(),則父類的建構函式預設會被繼承下來,且會自動執行。
2,如子類定義了建構函式 __construct(),因為建構函式名也是__construct(),所以子類的建構函式實際上是覆蓋(override)了父類的建構函式。這時執行的是該子類的建構函式。
這時如果要在子類裡執行父類的建構函式,必須執行類似以下語句:
parent::__construct();
例如:
class base2
{
function __construct()
{
echo ‘this is base2 construct‘;
}
function __destruct()
{
}
}
class class2 extends base2
{
function __construct()
{
parent::__construct();
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
{
echo ‘this is class2 construct‘;
}
function class3() //for PHP4.0
{
$this->__construct();
}
}
$c3 = new class3;
php 4.X與5.x版本建構函式區別與類的繼承