PHP類的封裝與繼承詳解
封裝
把成員方法和成員屬性封裝到類中,隱藏屬性和方法實(shí)現(xiàn)的細(xì)節(jié),通過public、protected、private等限定類成員的訪問權(quán)限,數(shù)據(jù)被保護(hù)在內(nèi)部,只通過被授權(quán)的成員方法才可以操作,盡可能的對(duì)成員進(jìn)行封裝。
public:方法或者屬性在任何作用域下都可以訪問到,而且是默認(rèn)的,如果沒有為一個(gè)屬性或方法指定訪問修飾符,它將是public。
protected:本類和子類可以訪問,外部對(duì)象不可以調(diào)用。
private:只能在本類訪問,子類與外部對(duì)象都不可能調(diào)用。經(jīng)過private標(biāo)記的方法或者屬性可以在繼承類中重新定義,每一個(gè)類只能看到它自己定義的私有方法。
這三個(gè)修飾符從作用范圍上來講應(yīng)該像這樣從大到小排序:public→protected→private之所以說是在作用范圍上,是因?yàn)轭惏岩恍傩院头椒ㄟM(jìn)行了封裝,這個(gè)封裝就決定了數(shù)據(jù)的“可見性”,這樣我們?cè)陬惖耐饷娌荒軌螂S意修改所定義的屬性和方法而只能夠進(jìn)行調(diào)用,這就是封裝的好處,同時(shí)也提高了安全性。
我們給出代碼示例:
class myClass{ public $public="Public"; //public屬性 protected $protected="Protected"; //protected屬性 private $private="Private"; //private 屬性 function say_Hello() { //public屬性 //只是舉例說明,自行添加內(nèi)容 } $obj=new myClass(); echo $obj->public; //echo $obj->protected; //echo $obj->private;
通過運(yùn)行以上示例我們得到一個(gè)“Public”,但當(dāng)你把//echo $obj->private;的注釋去掉時(shí),你會(huì)得到一下如下的錯(cuò)誤:
Fatal error: Cannot access protected property myClass::$protected in E:apachehtdocsexamplefile.php on line 13。
可以看到我們不能隨意去訪問類的屬性定義,我們?cè)凇巴饷妗笔遣恢肋@個(gè)類中到底有那些成員,因?yàn)檫@些成員對(duì)于其他的類可能是不可的。當(dāng)然如果我們一定要訪問或者修改定義為“私有”的屬性時(shí),也可以使用PHP所提供的系統(tǒng)方法:_get()和_set()。
繼承
可以使一個(gè)類繼承并擁有另一個(gè)已經(jīng)存在類的成員屬性和方法,被繼承的類稱為父類或基類,繼承類為子類。通過extends關(guān)鍵字實(shí)現(xiàn)繼承關(guān)系。通俗來說,要有繼承就得有一個(gè)“根源”,這“根源”你可能想像你以后生了兒子或者女兒,他們會(huì)從你這里得到一些“東西(屬性和方法)”,這樣你的“后代”就是持有你(根源)所有的一些特征了。
產(chǎn)生“根源”類(父類或者基類)
語法:class father{
}
產(chǎn)生“后代”(子類)
語法:class son extends father{
}
PHP extends類繼承示例代碼:
class father{ protected $name; function __construct($name){ //構(gòu)造函數(shù) $this->name=$name; } function work(){ echo "{$this->name}我在工作; } function __destruct(){} //析構(gòu)函數(shù) } class son extends father{ //繼承父類 function play(){ echo "{$this->name}我在玩游戲; } } $my_father=new father(“爸爸”); //創(chuàng)建父類對(duì)象 $my_father->work(); $my_son=new son(“兒子”); $my_son->work(); $my_son->play();
解析:在父類father里,我們定義了一般的屬性和方法,然后定義子類。你可能發(fā)現(xiàn)在子類里內(nèi)是沒有構(gòu)造函數(shù)和析構(gòu)函數(shù)的,因?yàn)樽宇愂抢^承了父類的所有方法,所以可以調(diào)用$my_son->work(); 這就是PHP類的繼承了。另外要注意:PHP不能多層繼承,如:class A extends B extends C,這樣的繼承在PHP中是無效的,PHP里只有單繼承,不能多繼承,需要其他辦法變相“實(shí)現(xiàn)”多繼承。
以上就是關(guān)于PHP類的封裝與繼承學(xué)習(xí)內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
- PHP Trait代碼復(fù)用類與多繼承實(shí)現(xiàn)方法詳解
- PHP接口多繼承及tarits實(shí)現(xiàn)多繼承效果的方法
- PHP接口繼承及接口多繼承原理與實(shí)現(xiàn)方法詳解
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之接口的繼承定義與用法詳解
- 詳細(xì)對(duì)比php中類繼承和接口繼承
- php 三大特點(diǎn):封裝,繼承,多態(tài)
- PHP入門教程之面向?qū)ο蟮奶匦苑治?繼承,多態(tài),接口,抽象類,抽象方法等)
- PHP中類的繼承和用法實(shí)例分析
- php構(gòu)造方法中析構(gòu)方法在繼承中的表現(xiàn)
- php 多繼承的幾種常見實(shí)現(xiàn)方法示例
相關(guān)文章
Zend Framework上傳文件重命名的實(shí)現(xiàn)方法
這篇文章主要介紹了Zend Framework上傳文件重命名的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Zend Framework上傳文件重命名的具體操作步驟與配置、檢測(cè)、重命名操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-11-11php smtp實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了php smtp實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06PHP Undefined index報(bào)錯(cuò)的修復(fù)方法
用$_GET["xx"]這種形式取得數(shù)據(jù)時(shí),如果之前不加判斷,$_GET["xx"]不存在時(shí)會(huì)出現(xiàn)這樣的警告:PHP Notice: undefined index xxx。2011-07-07用php來限制每個(gè)ip每天瀏覽頁(yè)面數(shù)量的實(shí)現(xiàn)思路
這篇文章主要介紹了用php來限制每個(gè)ip每天瀏覽頁(yè)面數(shù)量的實(shí)現(xiàn)思路,需要的朋友可以參考下2015-02-02php控制反轉(zhuǎn)與依賴注入的實(shí)現(xiàn)介紹
IOC-Inversion of Control,即控制反轉(zhuǎn)。它不是什么技術(shù),而是一種設(shè)計(jì)思想。這篇文章主要介紹了php控制反轉(zhuǎn)與依賴注入的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09php實(shí)現(xiàn)搜索一維數(shù)組元素并刪除二維數(shù)組對(duì)應(yīng)元素的方法
這篇文章主要介紹了php實(shí)現(xiàn)搜索一維數(shù)組元素并刪除二維數(shù)組對(duì)應(yīng)元素的方法,涉及php針對(duì)數(shù)組的定義、遍歷及刪除等操作技巧,需要的朋友可以參考下2015-07-07php中處理mysql_fetch_assoc返回來的數(shù)組 不用foreach----echo
php中處理mysql_fetch_assoc返回來的數(shù)組 不用foreach----echo的方法,需要的朋友可以參考下。2011-05-05PHP中把對(duì)象轉(zhuǎn)換為關(guān)聯(lián)數(shù)組代碼分享
這篇文章主要介紹了PHP中把對(duì)象轉(zhuǎn)換為關(guān)聯(lián)數(shù)組代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04