PHP中類的繼承和構造函數的繼承


PHP4.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()。

子類的構造函數名也是__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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM