PHP類繼承 extends使用介紹

2022-10-03 21:39:18 字數 2639 閱讀 9479

出來工作這麼久了,專案經驗倒是不少,但是當問及底層的東西時候,常常是一言不發了。現在專案設計底層的東西越來越少,可以說是真正用到的也就是那麼一點,真正核心的東西都已經被框架封裝好了。總感覺自己一直進步很慢,關於底層設計思想,常常也只可意會。隨著時間的流逝,我們常常會感慨書到用時方恨少了,接下來一定要惡補設計思想了。

今天先來複習一下類繼承。

類繼承很重要,作為程式設計師也基本每天都會和他打交道,但是有些東西你真的都知道嗎?下面是從官網上面看到的。

乙個類可以在宣告中用 extends,關鍵字繼承另乙個類的方法和屬性。php不支援多重繼承,乙個類只能繼承乙個基類。

被繼承的方法和屬性可以通過用同樣的名字重新宣告被覆蓋。但是如果父類定義方法時使用了 final,則該方法不可被覆蓋。可以通過 parent:: 來訪問被覆蓋的方法或屬性。

當覆蓋方法時,引數必須保持一致否則 php 將發出 e_strict 級別的錯誤資訊。但建構函式例外,建構函式可在被覆蓋時使用不同的引數。

關於基本的概念想必大家都會知道,但是對於final和parent::在專案中我還真沒有怎麼使用過,慚愧啊。

下面主要說一下這兩個關鍵字的用途吧。

final 關鍵字

php 5新增的乙個關鍵字,如果父類中的方法被宣告為 final,則子類無法覆蓋該方法。同樣如果乙個類被宣告為 final,則不能被繼承。

需要注意的是: 屬性不能被定義為 final,只有類和方法才能被定義為 final。

範圍解析操作符(::)

範圍解析操作符或者更簡單地說是一對冒號,可以用於訪問靜態成員,類常量,還可以用於覆蓋類中的屬性和方法。

self,parent 和 static 這三個特殊的關鍵字是用於在類定義的內部對其屬性或方法進行訪問的。

當乙個子類覆蓋其父類中的方法時,php 不會呼叫父類中已被覆蓋的方法。是否呼叫父類的方法取決於子類。這種機制也作用於建構函式和析構函式,過載以及魔術方法。

下面是呼叫父類的方法的乙個示例:

複製** **如下:

<?php

classwww.cppcns.com myclass

}class otherclass extends myclass

}$class = new otherclass();

$class->myfunc();

/** * 輸出結果 ->

* myclass::myfunc()

* otherclass::myfunc()

*/?>

當在類定義之外引用到這些專案時,要使用類名。

::class 自 php 5.5 起,關鍵詞 class 也可用於類名的解析。使用 classname::class 你可以獲取乙個字串,包含了類 classname 的完全限定名稱。這對使用了 命名空間 的類尤其有用。這些可能就是以後要討論的話題了,關於這個概念那就是以後要討論的了,現在我們還在使用php5.3。

不過說句實話,有一些關鍵字在小專案中確實是很難使用,不過我想多了解一些總還是需要的。尤其是當你使用一些第三方的類庫時候,當你細細研究他的程式邏輯,你總能學點東西。儘管有些東西你長時間不用,可能就忘記了,但是畢竟他曾經在你腦海裡經過過,總會為以後的人生留點痕跡。

最後廢話不多說了,分享一段範圍解析操作符(::)應用的**,你們也來感受下:

複製** **如下:

<?php

class ca

public static function setother($val)

}class cb extends ca

/*** 不重新宣告 method()方法

*/}class cc extends ca

/*** 不重新宣告 setother()方法

*/}class cd extends ca

cb::setoth程式設計客棧er('cb'); //  cb::method()!

cb::method(); // ca::method()!

cc::setother('cc'); // ca::method()!

cc::method(); // cc::method()!

cd::setother('cd'); // ca::method()!

cd::method(); // ca::metho程式設計客棧d()!

/** * 輸出結果 ->

* foo

* cb

* tango

* cc

* foo

* cd

*/程式設計客棧?>

php extends類繼承**示例:

複製** **如下:

< ?php  

class a  

function getx()  

function gety()  

function __destruct(){}  

}  

class a2 extends a{}  

/*extends是乙個繼承函式*/  

$b2=new a2(10,10);  

echo $b2->getx()."

";  

echo $b2->gety();  

?>

以上介紹的內容就是php extends類繼承的全部實現步驟。

本文標題: php類繼承 extends使用介紹

本文位址:

jQuery繼承的實現(extends)

jquery中的extend方法通過不同的引數實現了幾種不同的繼承方法 jquery.extend jquery.fn.extend function i 1,length arguments.length,deep false,options handle a deep copy situatio...

Java學習筆記 繼承 extends

package cn.itcast.day09.demo01 public class employee package cn.itcast.day09.demo01 public class teacher extends employee package cn.itcast.day09.demo...

JSP頁面的繼承 extends

1.分析 運用過python django模板的應該清晰,django裡邊有乙個激動人心的功用就是模板能夠運用類的承繼聯絡。即模板是能夠承繼的,而且不限承繼的層次。如1.child.html extends base.html 2.grandchild.html extends child.html...