php構造函式

php構造函式是類中的一個特殊函式,當使用 new 操作符創建一個類的實例時,構造函式將會自動調用。

基本介紹

  • 中文名:php構造函式
  • 性質:特殊函式
  • 領域:PHP語言
  • 套用:編程
構造函式,函式,構造函式,注意,析構函式,注意,

構造函式

當函式與類同名時,這個函式將成為構造函式。如果一個類沒有構造函式,則調用基類的構造函式,如果有的話,則調用該構造函式。
<?phpclass Auto_Cart extends Cart {    function Auto_Cart(){        $this -> add_item("10", 1);    }}?>
上文定義了一個 Auto_Cart 類,即 Cart 類加上一個構造函式,當每次使用“new”創建一個新的 Auto_Cart 類實例時,構造函式將自動調用並將一件商品的數目初始化為“10”。構造函式可以使用參數,而且這些參數可以是可選的,它們可以使構造函式更加有用。為了依然可以不帶參數地使用類,所有構造函式的參數應該提供默認值,使其可選。
<?phpclass Constructor_Cart extends Cart {    function Constructor_Cart($item = "10", $num = 1){        $this -> add_item($item, $num);    }}//買些同樣的無聊老貨$default_cart = new Constructor_Cart;//買些實在貨...$different_cart = new Constructor_Cart("20", 17);?>
也可以使用 @ 操作符來抑制發生在構造函式中的錯誤。例如 @new。
<?phpclassA{    function A(){        echo  "IamtheconstructorofA.<br>/n";    }    function B(){        echo "IamaregularfunctionnamedBinclassA.<br>/n";        echo "IamnotaconstructorinA.<br>/n";    }}class B extends A{    function C(){        echo "Iamaregularfunction.<br>/n";    }}//調用B()作為構造函式$b = new B;?>
析構函式是一種當對象被銷毀時,無論使用了 unset() 或者簡單的脫離範圍,都會被自動調用的函式。php 中沒有析構函式。可以用 register_shutdown_function() 來替代模擬大多數析構函式的效果。

函式

構造函式

void __construct ([mixed $args [, $... ]])
PHP 5 允行開發者在一個類中定義一個方法作為構造函式。具有構造函式的類會在每次創建對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作

注意

  • 如果子類中定義了構造函式則不會暗中調用其父類的構造函式。要執行父類的構造函式,需要在子類的構造函式中調用 parent::__construct()。
使用新標準的構造函式:
<?phpclass BaseClass{    function__construct(){        print "InBaseClassconstructor\n";    }}class SubClass extends BaseClass{    function__construct(){        parent::__construct();        print "InSubClassconstructor\n";    }}$obj = new BaseClass();$obj = new SubClass();?>
為了實現向後兼容性,如果 PHP 5 在類中找不到 __construct() 函式,它就會嘗試尋找舊式的構造函式,也就是和類同名的函式。因此唯一會產生兼容性問題的情況是:類中已有一個名為 __construct() 的方法,但它卻又不是構造函式。

析構函式

void __destruct (void)
PHP 5 引入了析構函式的概念,這類似於其它面向對象的語言,如 C++。析構函式會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。
析構函式例子:
<?phpclass MyDestructableClass{    function__construct(){        print "Inconstructor\n";        $this->name = "MyDestructableClass";    }    function__destruct(){        print "Destroying".$this->name."\n";    }}$obj= new MyDestructableClass();?>

注意

  • 和構造函式一樣,父類的析構函式不會被引擎暗中調用。要執行父類的析構函式,必須在子類的析構函式體中顯式調用 parent::__destruct()。
  • 析構函式在腳本關閉時調用,此時所有的頭信息已經發出。
  • 試圖在析構函式中拋出一個異常會導致致命錯誤。

相關詞條

熱門詞條

聯絡我們