多型是物件導向三大特性之一(封裝、繼承、多型)。指同一介面或基類別的不同實作類別,可對相同方法呼叫產生不同行為。PHP 5.1 引入型別提示,可限制參數型別,配合介面實現多型。
interface Shape { public function draw(); }
class Triangle implements Shape { public function draw() { echo "Triangle::draw()\n"; } }
class Rectangle implements Shape { public function draw() { echo "Rectangle::draw()\n"; } }
class TestPoly { public function drawNow(Shape $shape) { $shape->draw(); } }
$test = new TestPoly();
$test->drawNow(new Triangle()); // 輸出 Triangle::draw()
$test->drawNow(new Rectangle()); // 輸出 Rectangle::draw()
drawNow() 接受任何實作 Shape 的物件,具體呼叫哪個 draw() 由執行時傳入的物件型別決定,即為多型。
繫結指方法呼叫與方法主體的連結。靜態繫結在編譯期決定,動態繫結在執行期根據物件實際型別決定。PHP 為動態語言,預設使用動態繫結,無需開發者干預。