多態的概念一般是強類型語言來談的,因為強類型語言它必須要聲明參數類型,比如一個手電筒對象的打開方法其參數申明了只能是藍光,就不能傳其他光。但可以用父類渲染的方式使其多態,比如聲明一個光的父類,讓其它顏色的光都繼承自這個光的父類,申明其參數為父類光,然后傳光的任何子類都可以;這就是強類型的多態;
但php是弱類型的動態語言,不檢測參數類型,傳什么都可以;**但在php5.3版本可以聲明參數為某對象;當聲明參數為某類實例化后的對象時,就得用父類渲染的方式令其多態;**
```php
<?php
class Glass {
public function display() {
}
}
class RedGlass extends Glass{
public function display() {
echo '紅光照耀<br />';
}
}
class BlueGlass extends Glass {
public function display() {
echo '藍光照耀<br />';
}
}
class GreenGlass extends Glass {
public function display() {
echo '綠光照耀<br />';
}
}
class Pig {
public function display() {
echo '八戒下凡,哼哼墜地!<br />';
}
}
class Light {
public function ons(Glass $g) {
//這里的$g對象必須是由Glass或Glass的子類實例化而來;本用法只能在php5.3里面使用;
//如果在遵循了PSR規范的框架里面,這里的Glass類同樣可以寫成這樣的模式 Home\Controller\Glass $g
//用玻璃渲染顏色
$g->display();
}
}
// 造手電筒
$light = new Light();
// 造紅玻璃
$red = new RedGlass();
// 造藍玻璃
$blue = new BlueGlass();
// 紅燈亮
$light->ons($red); //把對象傳進方法內;
// 藍燈亮
$light->ons($blue);
// 豬八戒降生
$pig = new Pig(); //$pig不是由Glass或Glass的子類實例化,所以會報錯了;
$light->ons($pig);
?>
```
- 現代化PHP特性
- php7常用特性整理
- 反射機制Reflection
- 依賴注入與服務容器
- 抽象類與接口
- 類多繼承的替代方案Traits
- 類的延遲綁定(后期綁定)
- 生成器語法
- 匿名函數和閉包
- 匿名類
- 理解php的output buffer
- 斷言ASSERT
- 魔術方法小結
- Zend Opcache字節碼緩存
- 內置的http服務器
- SPL標準庫
- 【SPL標準庫專題(1)】SPL簡介
- 【SPL標準庫專題(2)】Iterator
- 【SPL標準庫專題(3)】Classes
- 【SPL標準庫專題(4)】Exceptions
- 【SPL標準庫專題(5)】Datastructures:SplDoublyLinkedList
- 【SPL標準庫專題(6)】Datastructures:SplStack & SplQueue
- 【SPL標準庫專題(7)】Datastructures:SplPriorityQueue
- 【SPL標準庫專題(8)】Datastructures:SplHeap & SplMaxHeap & SplMinHeap
- 【SPL標準庫專題(9)】Datastructures:SplFixedArray
- 【SPL標準庫專題(10)】Datastructures:SplObjectStorage
- PHPcomposer使用手札[ing]
- PHP中的多態
- 通過命名空間實現自動加載的框架雛形
- 日期與金額
- PHPstorm使用攻略
- 筆記本