PHP面向?qū)ο笾庋b,繼承與多態(tài)詳解
在普通的編程中,沒有涉及架構(gòu)或者良好的設(shè)計(jì),絕大多數(shù)都是使用的面向過程的方式。
當(dāng)編程逐步深入后,就需要合理使用面向?qū)ο蟮闹R(shí)來設(shè)計(jì)程序,而不是簡(jiǎn)單地腦海里有了思路就去寫代碼來實(shí)現(xiàn),這是比較低級(jí)的做法。
面向?qū)ο蟮娜筇攸c(diǎn):封裝、繼承、多態(tài)。
封裝、繼承比較好理解,通過一個(gè)例子就能看明白:
<?php class VisualObj{ private $Viual=true; protected $width; protected $height; protected $name; } class ActiveX extends VisualObj{ const NamePrefix="ActiveX"; protected static $count=0; public function __construct(string $name,int $width=100,int $height=50){ $this->width=$width; $this->height=$height; self::$count=self::$count+1; if($name==''||$name==null){ $this->SetName(); }else{ $this->name=$name; } } public function GetName(){ return $this->name; } public function SetName(){ $this->name=self::NamePrefix.$this->GetCount(); } public function GetCount(){ return self::$count; } public function GetWidth(){ return $this->width; } public function GetHeight(){ return $this->height; } public function __destruct(){ echo "__destruct".$this->GetCount(); } } $obj1=new ActiveX(''); echo $obj1->GetName(); echo "<br>"; echo $obj1->GetWidth(); echo "<br>"; echo $obj1->GetHeight(); echo "<hr/>"; $obj2=new ActiveX("新的控件",120,60); echo $obj2->GetName(); echo "<br>"; echo $obj2->GetWidth(); echo "<br>"; echo $obj2->GetHeight(); echo "<hr/>"; ?>
靜態(tài)變量的理解,以前我們做C/S開發(fā)的時(shí)候,拖放控件到設(shè)計(jì)界面的時(shí)候總是能看到控件名字后面的數(shù)字是自動(dòng)累加的,這個(gè)就是靜態(tài)變量在起作用。
通俗的理解多態(tài)就是同樣的方法名和參數(shù)名實(shí)現(xiàn)不同的功能。
在PHP中通過一個(gè)例子就好理解了。
1、通過接口演示
<?php interface EditObj{ public function SaveAs(); } class ExcelObj implements EditObj{ public function SaveAs(){ echo "編輯Excel的保存"; } } class WordObj implements EditObj{ public function SaveAs(){ echo "編輯Word的保存"; } } class PptObj implements EditObj{ public function SaveAs(){ echo "編輯Ppt的保存"; } } class app{ public static function EndEdit($obj){ $obj->SaveAs(); } } app::EndEdit(new ExcelObj()); echo "<hr/>"; app::EndEdit(new WordObj()); echo "<hr/>"; app::EndEdit(new PptObj()); echo "<hr/>"; class TxtObj{ public function SaveAs(){ echo "編輯Txt的保存"; } } app::EndEdit(new TxtObj()); ?>
2、通過(抽象)類演示
<?php abstract class EditObj{ public abstract function SaveAs(); public function OutInfo(){ echo '輸出信息'; } } class ExcelObj extends EditObj{ public function SaveAs(){ echo "編輯Excel的保存"; } } class WordObj extends EditObj{ public function SaveAs(){ echo "編輯Word的保存"; } } class PptObj extends EditObj{ public function SaveAs(){ echo "編輯Ppt的保存"; } } class app{ public static function EndEdit($obj){ $obj->SaveAs(); } } app::EndEdit(new ExcelObj()); echo "<hr/>"; app::EndEdit(new WordObj()); echo "<hr/>"; app::EndEdit(new PptObj()); echo "<hr/>"; class TxtObj{ public function SaveAs(){ echo "編輯Txt的保存"; } } app::EndEdit(new TxtObj()); ?>
可以看到,最后的TxtObj因?yàn)橛蠸aveAs方法,也得到了正確的執(zhí)行。
我們可以加類型限制:
class app{ public static function EndEdit(EditObj $obj){ $obj->SaveAs(); } }
這樣的話,最后的app::EndEdit(new TxtObj());就會(huì)報(bào)錯(cuò)了。
還可以加類型判斷:
class app{ public static function EndEdit($obj){ if($obj instanceof EditObj){ $obj->SaveAs(); }else{ echo "輸入的類型錯(cuò)誤,不能執(zhí)行!"; } } }
這樣事先的錯(cuò)誤截?cái)鄬?duì)用戶就會(huì)好一些。
對(duì)于上面的接口也一樣可以這樣來做,代碼也一樣。
到此這篇關(guān)于PHP面向?qū)ο笾庋b,繼承與多態(tài)詳解的文章就介紹到這了,更多相關(guān)PHP封裝 繼承 多態(tài)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- php面向?qū)ο蟪绦蛟O(shè)計(jì)
- PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)之類屬性與類常量實(shí)現(xiàn)方法分析
- php面向?qū)ο笾攸c(diǎn)知識(shí)分享
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)中的self、static、parent關(guān)鍵字用法分析
- php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)重載(overloading)操作詳解
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之構(gòu)造方法和析構(gòu)方法詳解
- php面向?qū)ο蟪绦蛟O(shè)計(jì)介紹
相關(guān)文章
phpmyadmin提示The mbstring extension is missing的解決方法
這篇文章主要介紹了phpmyadmin提示The mbstring extension is missing的解決方法,分析了錯(cuò)誤提示的原因與不同平臺(tái)的解決方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12部署PHP項(xiàng)目應(yīng)該注意的幾點(diǎn)事項(xiàng)分享
這篇文章主要介紹了部署PHP項(xiàng)目應(yīng)該注意的幾點(diǎn)事項(xiàng),有需要的朋友可以參考一下2013-12-12PHP call_user_func和call_user_func_array函數(shù)的簡(jiǎn)單理解與應(yīng)用分析
這篇文章主要介紹了PHP call_user_func和call_user_func_array函數(shù)的簡(jiǎn)單理解與應(yīng)用,結(jié)合實(shí)例形式分析了PHP call_user_func和call_user_func_array函數(shù)的基本功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11修改Zend引擎實(shí)現(xiàn)PHP源碼加密的原理及實(shí)踐
來源:phphot PHP文件的源碼都是明文,這對(duì)于某些商業(yè)用途來說,并不適合。 因此考慮使用加密的手段保護(hù)源碼。 實(shí)在不耐煩等待zend出編譯器,而且編譯和加密本質(zhì)上不是一回事兒。自己動(dòng)手、開始修改。2008-04-04在php7中MongoDB實(shí)現(xiàn)模糊查詢的方法詳解
MongoDB模糊查詢語句相信對(duì)大家來說都不陌生,這篇文章主要給大家介紹了在php 7中MongoDB實(shí)現(xiàn)模糊查詢的方法,文中給出了詳細(xì)的介紹和示例代碼,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友一起來看看吧。2017-05-05