php构造和析构方法,php5构造函数与析构函数实例
自php5起,有了構造函數與析構函數。
這使得php更富有面向對象的魅力了。
在php4時,構造函數用的是與類同名的函數來進行構造這個動作。
例如:
復制代碼 代碼示例:
/*
* myclass.php
*/
class myclass {
function myclass {
print "this is myclass\n";
}
}
//創建一個新的實例
$obj = new myclass();
?>
將以上代碼保存為myclass.php,運行后,會打印出 this is myclass字樣。這是php4的構造函數(當然,為了兼容,php5也可以這樣寫)。
在php5里,有了專門的構造和析構函數。__construct()和__destruct() 。再重新改寫這個myclass.php。
復制代碼 代碼示例:
/*
* myclass.php
*/
class myclass {
function __construct() {
print "constructor\n";
}
function __destruct() {
print "destroying\n";
}
}
//創建一個新的實例
$obj = new myclass();
?>
保存以后發現打印出了"constructor destroying"。說明構造和析構的確發生了。
目前為止,沒有任何問題。在php5的手冊里,對于使用__construct還有段說明。如下:
為了實現向后兼容性(指php 4),如果 php 5 在類中找不到 __construct() 函數,它就會嘗試尋找舊式的構造函數,也就是和類同名的函數。因此唯一會產生兼容性問題的情況是:類中已有一個名為 __construct() 的方法,但它卻又不是構造函數。
再來看一種情況,當一個派生類繼承了基類并且這兩個類都存在構造和析構函數的時候會出現什么眼的狀況呢?
php 5對此的處理手段是: 隱藏基類的構造和析構!
代碼:
復制代碼 代碼示例:
/*
* myclass.php
*/
class baseclass {
function __construct() {
print "baseclass:\n constructor ";
}
function __destruct() {
print "baseclass:\n destroying ";
}
}
class subclass extends baseclass {
function __construct() {
print "subclass:\n constructor ";
}
function __destruct() {
print "subclass:\n destroying ";
}
}
$obj = new subclass();
?>
保存運行后,結果打印:subclass: constructor subclass: destroying
可以看到,基類的構造與析構并沒有發生。
這不得不讓人費解,為什么php5會采取這種的機制呢?
c++的構造與析構的過程是:基類構造->派生類構造->派生類析構->基類析構。這才是成熟的機制。為什么php 5 會標新立異?
很顯然,這種做法并不十分的明智。
翻看php手冊找到一種說法:
php 4 不會從派生類的構造函數中自動調用基類的構造函數。恰當地逐次調用上一級的構造函數是用戶的責任。 (php 4)
如果子類中定義了構造函數則不會暗中調用其父類的構造函數。要執行父類的構造函數,需要在子類的構造函數中調用 parent::__construct()。 (php 5)
可惜這兩種說法并不足以令人信服。既然已經存在了構造,為何還得用手工調用?
總結
以上是生活随笔為你收集整理的php构造和析构方法,php5构造函数与析构函数实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好听的女孩子名字大全
- 下一篇: 速戳....