PHP面向?qū)ο笾庋b,繼承與多態(tài)詳解
在普通的編程中,沒有涉及架構(gòu)或者良好的設(shè)計(jì),絕大多數(shù)都是使用的面向過(guò)程的方式。
當(dāng)編程逐步深入后,就需要合理使用面向?qū)ο蟮闹R(shí)來(lái)設(shè)計(jì)程序,而不是簡(jiǎn)單地腦海里有了思路就去寫代碼來(lái)實(shí)現(xiàn),這是比較低級(jí)的做法。
面向?qū)ο蟮娜筇攸c(diǎn):封裝、繼承、多態(tài)。
封裝、繼承比較好理解,通過(guò)一個(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中通過(guò)一個(gè)例子就好理解了。
1、通過(guò)接口演示
<?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、通過(guò)(抽象)類演示
<?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ì)于上面的接口也一樣可以這樣來(lái)做,代碼也一樣。
到此這篇關(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)文章
php ignore_user_abort與register_shutdown_function 使用方法
php ignore_user_abort與register_shutdown_function 使用方法小結(jié)。2009-06-06
編寫安全 PHP應(yīng)用程序的七個(gè)習(xí)慣深入分析
本篇文章是對(duì)編寫安全-PHP應(yīng)用程序的七個(gè)習(xí)慣進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP獲取數(shù)組中某元素的位置及array_keys函數(shù)應(yīng)用
獲取數(shù)組中一元素的位置有很多方法,其中PHP自身就已經(jīng)內(nèi)置了一個(gè)函數(shù)array_keys(),下邊的代碼能夠打印出所有PHP的內(nèi)置函數(shù),感興趣的朋友可以了解下同時(shí)學(xué)習(xí)一下函數(shù)array_keys()的使用方法,就當(dāng)鞏固知識(shí)量啦2013-01-01
PHP set_time_limit(0)長(zhǎng)連接的實(shí)現(xiàn)分析
每次我們?cè)L問(wèn)PHP腳本的時(shí)候,都是當(dāng)所有的PHP腳本執(zhí)行完成后,我們才得到返回結(jié)果。如果我們需要一個(gè)腳本持續(xù)的運(yùn)行,那么我們就要通過(guò)php長(zhǎng)連接的方式,來(lái)達(dá)到運(yùn)行目的。2010-03-03
PHP實(shí)現(xiàn)刪除多重?cái)?shù)組對(duì)象屬性并重新賦值的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)刪除多重?cái)?shù)組對(duì)象屬性并重新賦值的方法,涉及php結(jié)合sphinx操作數(shù)組元素的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06
PHP開發(fā)環(huán)境配置(MySQL數(shù)據(jù)庫(kù)安裝圖文教程)
下載完軟件后開始PHP開發(fā)環(huán)境的配置。注意是開發(fā)環(huán)境,不是服務(wù)器環(huán)境。2010-04-04

