詳解php中的類與物件 繼承

2022-09-27 04:12:11 字數 2583 閱讀 3863

簡介

在php中,型別的繼承使用extends關鍵字,而且最多只能繼承乙個父類,php不支援多繼承。

class myclass

public function getdat()

} class mysubclass extends myclass }

$a = new myclass(3);

$b = new mysubclass(4);

echo $a->getdat(); // 3

echo $b->getdat(); // dat: 4

方法覆蓋

包括建構函式在內,子類可以重新定義同名的類方法以覆蓋父類方法。覆蓋時遵循以下規則:

1.除建構函式之外,其他函式在覆蓋時,函式的引數列表必須相同

2.包括建構函式在內,方法被覆蓋後,呼叫子類方法時並不會自動呼叫父類方法

3.如果父類要禁止方法被子類覆蓋,可以使用final來宣告方法,這時如果子類仍要覆蓋父類方法,將會出錯

class myclass

public function getname()

} class mysubclass extends myclass

public function getname()

} $b = new mysubclass("myname", true); // myname

echo $b->getname(); // myname1

class myclass

}屬性重定義

在子類中,可以訪問父類中的public和protected屬性成員,除非重定義了同名的自有屬性,這時,父類中的屬性將無法訪問。

方法則不同,子類對方法進行覆蓋後,仍然可以訪問到父類方法。

class myclass

protected function f2()

private function f3()

} class mysubclass extends myclass

// 父類的f3()是私有的,這裡的定義與父類無關

public function f3()

} $b = new mysubclass;

$b->f1();echo "\n";

/* mysubclass f1

$a:1; $b:22; $c:33;

myclass f1

$a:1; $b:22; $c:3;

myclass f2

$a:1; $b:22; $c:3;

*/ $b->f3();echo "\n";

/* mysubclass f3

*/重定義父類(同名)屬性時,屬性的可訪問性可以變得更開放,但不能更嚴格,也就是說,父類中的public屬性,不能在子類中修改為private屬性。

如果通過子類物件呼叫父類方法,那麼該父類方法在訪問屬性時,對於重定義了的同名屬性,public和protected的屬性將訪問到子類版本,private屬性將訪問到父類版本。也可以理解為,public和protected屬性可以被重定義(父類的版本被重定義,從而不存在了),而private並未被重定義(父類中的屬性仍然存在,通過父類方法進行訪問,與子類中是否有同名屬性毫不相干)。

class myclass }

class mysubclass extends myclassqrlreq }

$b = new mysubclass;

$b->f1(); // $a:11; $b:22; $c:3;

$b->f2(); // $a:11; $b:22; $c:33;

範圍解析操作符 ::

又冒號常用於訪問類常量、類靜態變數,也用於在方法覆蓋時呼叫父類版本。與其搭配的還包括parent、self、static等關鍵字。

class myclass }

class mysubclass extends myclass }

$a = "myclass";

$ca = new myclass;

$cb = new mysubclass;

$cb->put();

echo myclass::name0 . "\n";

echo myclass::$id0 . "\n";

echo $a::name0 . "\n";

echo $a::$id0 . "\n";

echo $ca::name0 . "\n";

echo $ca::$id0 . "\n";

在子類中訪問父類中的成員時,應避免直接使用父類類名,而應使用parent::,以免破壞父類的封裝性。

final

宣告為final的方法不能被子類覆蓋,如果類宣告為final,則此類不能被繼承。

// 宣告為final的類不能被繼承

final class myclass

// final方法不能被覆蓋,不過此類已經是final類,方法無必要在宣告為final了

final public function getdat() }總結

本文標題: 詳解php中的類與物件(繼承)

本文位址:

類與物件的繼承

類與物件的繼承 1.繼承是什麼 類與物件的繼承可以說是方便呼叫一些類中的方法,其本質就是像兒子在接受父親的遺傳,父親能做的,兒子也能做,不過兒子卻是在不斷成長,所以有些兒子能另外做的事 不是接受父親遺傳,是後天生成的 2.繼承的基本格式 public class 子類 extends 父類 繼承所需...

類與物件 繼承

繼承是物件導向的基本特徵之一,通過繼承機制,可以在已有的類的基礎上建立新類,新類可以繼承已有類的屬性和行為,也可以修改已有類的屬性和行為,或者增加新的屬性和行為以滿足自身特殊的需要。ifndef a h ifdef a h include using namespace std class a a ...

PHP中類的繼承與方法重寫

php中類的繼承與方法重寫,歡迎大神補充指點!namespace 1009 class demo5 例項方法 public function getinfo 子類sub1繼承demo5父類,實現 復用 class sub1 extends demo5 例項化sub1類 sub1 new sub1 手...