程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php面向對象編程的繼承性

php面向對象編程的繼承性

編輯:PHP綜合

為什麼需要繼承?

<?php
//開發一套學生管理系統(小學生pupil,大學生,...)
//父類
class Stu{
public $name;
protected $age;
protected $grade;
public function showInfo(){
echo $this->name."||".$this->age;
}
}
//子類
class Pupil extends stu{ //小學生
public function testing(){
echo "小學生考試";
}
}
class Graduate extends stu{//研究生
public function testing(){
echo "研究生考試";
}
}
//創建學生
$stu1=new Pupil();
$stu1->testing();
$stu1->name="www.bianceng.cn";
$stu1->showInfo();
echo "<br />";
//創建研究生
$stu2=new Graduate();
$stu2->testing();
$stu2->name="hello";
$stu2->showInfo();
?>

從上面代碼可以看出,所謂繼承,就是一個子類通過 extends 父類,把父類的public/protect屬性和方法繼承下來,但不能繼承父類的private屬性和方法。

繼承的基本語法:

class 類名 extends 父類名{

//子類需要的屬性和方法

}

使用繼承的注意事項:

1)子類能把父類的public/protect屬性和方法繼承下來,但不能繼承父類的private屬性和方法

<?php
//父類的什麼屬性和方法被子類繼承
class A{
public $n1=1;
protected $n2="www.bianceng.cn";
private $n3=20;
public function test1(){
echo "test1()";
}
public function test2(){
echo "test2()";
}
public function test3(){
echo "test3()";
}
}
class SubClass extends A{
function show(){
echo "<br />".$this->n2; //
}
}
//創建SubClass對象
$sub1=new SubClass();
$sub1->test1();
echo "<br />";
$sub1->test2();
echo "<br />";
$sub1->test3();
echo "<br />".$sub1->n1;
$sub1->show();
?>

2)php繼承是單一繼承,即一個子類不能直接繼承兩個父類

可以通過繼承兩次的方法達到繼承多個類的目的。

<?php
class A{
}
class B extends A{
}
class C extends B{ //通過兩次繼承,C繼承了A和B兩個類
}
?>

3)當創建子類對象的時候,默認不會自動調用父類的構造方法。

<?php
class A{
//構造方法
public function __construct(){
echo "A__construct";
}
}
class B extends A{
function __construct(){
echo "B__construct";
}
}
//創建對象實例
$b=new B(); //輸出B__construct
?>

4)如果希望在子類中調用父類的構造方法或者其它方法(public/protected),可以這樣處理(了解即可):

(1)類名::方法名();

(2)parent::方法名();

例:

<?php
class A{
//構造方法
public $n1=90;
public function __construct($n1){
$this->n1=$n1;
echo "A__construct";
}
}
class B extends A{
function __construct(){
echo "B__construct";
//顯式的調用父類的方法
//A::__construct(900);
parent::__construct(900);
}
}
//創建對象實例
$b=new B(); //輸出B__construct
echo "<br />".$b->n1; //輸出900
?>

5)如果子類(派生類)中的方法與父類(基類)中的方法相同,稱之為方法重寫/方法覆蓋。

URL:http://www.bianceng.cn/webkf/PHP/201610/50463.htm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved