* 抽象類別
* 1.使用關鍵字: abstract
* 2.類別中只要有一個方法宣告為abstract抽象方法,那麼這個類別就必須宣告為抽象類
* 3.抽象方法只允許有方法宣告與參數列表,不允許有方法體;
* 4.因為抽象方法的不確定性,所以抽象類別禁止實例化,僅允許透過繼承來實例化;
* 5.繼承抽象類別的子類別中,必須將抽象類別中的所有抽象方法全部實作
* 6.子類別成員的訪問限制層級必須等於或小於抽象類別的約定,例如抽象類別是protected,子類別必須是
* protected 或public 不允許是private
* 7.子類別方法參數必須與抽象類別方法參數完全一致,但允許增加預設參數
* 特別注意
* 1. 儘管抽象類別不能實例化,但仍然可以為它創建建構器,但必須聲明為final
* 2. 抽象類別理論上說不應該擁有靜態成員,部分編輯器會有E_STRICT2048提示,但仍然可以這樣做
abstract class Fruits { //水果名称 protected $name; //声明静态属性,因为要用到静态类中 // protected static $name; //抽象方法 abstract public function eat(); //静态抽象方法 // abstract static public function eat(); //尽管不能直接实例化抽象类,但仍然可以有构造方法 public function __construct() { return '抽象类构造器,实例化时自动调用<br>'; } }
//為了教學方便,將抽象類與它的子類別全部寫在一個類別文件中
//實際開發中應該為每一個類別創建獨立的類別文件
class Apple extends Fruits { protected $name = '苹果'; //声明为静态属性 // public static $name = '苹果'; public function eat() { return $this->name.'可以直接生吃'; } //子类构造方法 public function __construct() { echo parent::__construct(); } //实现抽象类中的抽象静态方法eat() // public static function eat() // { // return self::$name.'可以直接生吃'; // } } $apple = new Apple; echo $apple->eat();
//先前是抽象靜態類別,不需要例化,可以用類別直接存取
//echo Apple::eat();
以上是php中的抽象類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!