欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP面向?qū)ο笾庋b,繼承與多態(tài)詳解

 更新時(shí)間:2022年05月24日 15:01:31   作者:dawn  
面向?qū)ο蟮娜筇攸c(diǎn)是封裝、繼承、多態(tài)。本文將通過示例詳細(xì)講講這三者的使用,文中示例代碼講解詳細(xì),需要的可以參考一下

在普通的編程中,沒有涉及架構(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論