自動目錄
- 1. php 的建構子
- 2. php 的解構子
- 3. 建構和解構函數只不過是一個函數,預設是 public,都可以被叫用。
- 4. 子類別繼承父類別後,父類別的建解構子都不會被執行
- 5. 子類別要執行父類別的建解構子,就要特別叫用,使用 parent:: 保留字
1. php 的建構子
php 的建構子會在類別實體化(也就是new之後)後執行,寫法有兩種,一個是用 __construct() 保留字,另一個是用和類別同名的函式
function __construct(){
print "BASE constructor";
}
}
或是
function BASE(){
print "constructor function same name with class";
}
}
若同時有兩個建構子,則以 __construct() 為優先,同類別名的函數將不會被執行。
我個人建議使用 __construct(),因為類別可能因為改名或複製,常會忘記把建構子也改名。
function BASE(){
print "constructor function same name with class";
}
function __construct(){
print "BASE constructed";
}
}
執行結果:
BASE constructor
2. php 的解構子
php 的解構子會在1程式執行到結尾 2程式exit 3物件被unset 後被執行,寫法用 __desctruct() 保留字
class BASE{
function __construct(){
print "BASE constructedn";
}
function __destruct(){
print "BASE destructedn";
}
}
執行:
$obj =new BASE();
unset($obj); <== 物件被 unset
print "ENDn";
exit;
結果
BASE constructed
BASE destructed
END
3. 建構和解構函數只不過是一個函數,預設是 public,都可以被叫用。
4. 子類別繼承父類別後,父類別的建解構子都不會被執行
曾經我在這被卡了很久,因為別的語言(java, c#)會去叫用父類別的建解樣子後再處理子類別的。
class BASE{
function BASE(){
print "constructor function same name with class";
}
function __destruct(){
print "BASE destructed";
}
}
class CHILD extends BASE{
function __construct(){
print "CHILD constructed";
}
function __destruct(){
print "CHILD destructed";
}
}
執行
$obj =new CHILD();
exit;
結果
CHILD constructed
CHILD destructed
5. 子類別要執行父類別的建解構子,就要特別叫用,使用 parent:: 保留字
function BASE(){
print "constructor function same name with class";
}
function __destruct(){
print "BASE destructed";
}
}
class CHILD extends BASE{
function __construct(){
parent::__construct();
print "CHILD constructed";
}
function __destruct(){
parent::__destruct();
print "CHILD destructed";
}
}
執行
$obj =new CHILD();
exit;
結果
constructor function same name with class
CHILD constructed
BASE destructed
CHILD destructed
以上小小經驗分享
原文 2011-06-07 21:24:13