Abstract 可以用來定義 Abstract 類、一般方法名稱及參數,Abstract 方法。
一般的方法可以實作邏輯。
如果是 Abstract 方法,則僅作描述,不實作邏輯。邏輯會保留到某個類別繼承(extends)時,來實作(強制)。
透過抽象,可以讓我們定義好規則以及實作一些方法,讓其他類別擴充時,可遵照規則實作,以及直接可使用這些方法。
例如,
首先,這邊我們定義了一個抽象的 Factory
其中再定義了一些抽象的方法, addPrimaryToppings 與 intro
接著,在 Tea 類別繼承了這個 Factory ,可同時擁有 Factory 原先定義的方法,以及必須強制實作的抽象方法。
<?php
abstract class Factory
{
public $name;
public function __construct($name) {
$this->name = $name;
}
public function make()
{
return $this
->addHotWater()
->addSugar()
->addPrimaryToppings()
->addMilk();
}
//一般方法
protected function addHotWater()
{
var_dump('Pour Hot water into cup');
return $this;
}
protected function addSugar()
{
var_dump('Add proper amount of sugar');
return $this;
}
protected function addMilk()
{
var_dump('Add proper amount of Milk');
return $this;
}
//Abstract 方法
protected abstract function addPrimaryToppings();
protected abstract public function intro() : string;
}
class Tea extends Factory
{
public function addPrimaryToppings()
{
var_dump('Add proper amount of tea');
return $this;
}
public function intro() : string {
return "This is $this->name!";
}
}
繼承抽象類別
$tea = new Tea("Tea");
echo $tea->intro();
$tea->make();
class Coffee extends Template
{
public function addPrimaryToppings()
{
var_dump('Add proper amount of Coffee');
return $this;
}
public function intro() : string {
return "This is $this->name!";
}
}
$coffee = new Coffee("Coffee");
echo $coffee->intro();
$coffee->make();
參考: https://medium.com/better-programming/understanding-use-of-interface-and-abstract-class-9a82f5f15837 https://www.w3schools.com/php/php_oop_classes_abstract.asp