php 假多态,论PHP面向对象之-多态
面向對象的三大特征
我們知道,面向對象有三大特征,分別是:
封裝
繼承
多態
封裝與繼承
封裝
因為對象都對自己負責,所以,對象的很多東西都不需要或不可以暴露給其他對象。
比如:
小明不需要將所有的信息告訴別人;
手機不能不封裝而把CPU、內存卡等等都暴露給用戶,這太危險了(如下圖)。
封裝解決了數據的安全性,內在也體現了‘每個對象都對自己負責’。
繼承
繼承,沒什么好說的,主要是實現了代碼的復用。
但說到這里,我們知道實現代碼的復用,有兩種方式,一種是組合、一種是繼承。
先給大家拋出一個問題:“什么時候該用組合?什么時候該用繼承呢?”
這個問題大家先想想,我們以后再討論。
重頭戲·多態
定義
對于多態,我們先下一個定義:
同一個操作,作用于不同的對象,會產生不同的結果。
說白了,就是一個相同的指令發出,不同的對象會對這個指令有不同的反應,所以稱為多態。
舉個栗子
比如,我們有2個對象,分別是 word、excel。
我們使用相同的操作 Ctrl+N。
相同的操作:
對于word是新建word文檔;
對于excel是新建excel表格。
多態有什么好處
多態最大的好處可以用2個詞語來概括:“靈活”、“解耦”。
耦合度的意思是模塊與模塊之間、代碼與代碼之間的關聯度。
緊耦合也就是他們之間的關聯度大,這樣的代碼是很難維護的,很容易出bug的。出現一個bug,其他bug很可能像滾雪球一樣增長。
我們經常說:“要面向接口編程,而不是面向實現編程”。
多態性,也就要求我們面向接口編程。
不同的對象,相同的接口,但因為多態,有了不同的實現。
這樣面向接口編程,就降低了耦合度,很靈活。
PHP中的多態
talk is cheap,show me your code
abstract class Animal{
//說話的方法
abstract public function say();
//吃的方法
public function eat(){
echo "eating food...";
}
}
//Dog子類繼承Animal抽象類
class Dog extends Animal {
public function say(){
echo "Dog say wangwang\n";
}
}
//Cat子類繼承Animal抽象類
class Cat extends Animal {
public function say(){
echo "Cat say miaomiao\n";
}
}
//test function
function work(Animal $obj){
if($obj instanceof Animal){
$obj->say();
}else{
echo "sorry.It's wrong";
}
}
work(new Cat()); //Cat say miaomiao
work(new Dog()); //Dog say wangwang
更多精彩,請關注公眾號“聊聊代碼”,讓我們一起聊聊“左手代碼右手詩”的事兒。
總結
以上是生活随笔為你收集整理的php 假多态,论PHP面向对象之-多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fc oracle,使用 CLI 配置
- 下一篇: shell 文件路径有空格_Python