本篇文章是PHP中抽象類別、介面和trait的一些內容,現在分享給大家,有需要的朋友也看以參考一下本篇文章的內容
手冊參考:http://php.net/manual/zh/language.oop5.abstract.php
定義: PHP 5 支援抽象類別和抽象方法。定義為抽象的類別不能被實例化。任何一個類,如果它裡面至少有一個方法是被聲明為抽象的,那麼這個類別就必須被宣告為抽象的。且繼承一個抽象類別的時候,子類別必須定義父類別中的所有抽象方法(抽象類別中可定義常數);
關鍵字: abstract
<?php abstract class AbstractClass { const NAME='张三'; // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1".self::NAME; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n";
#關鍵字: interface
interface test1{ function say(); } interface test2{ function see(); } //接口继承接口 (继承接口时使用extends关键字) interface test3 extends test1,test2 { function sleep(); } //类实现接口(实现接口时使用 implements关键字) class test implements test1,test2{ public function say(){} public function see(){} public function sleep() { echo '休息'; } } //接口中只能有抽象方法(不能定义常量,不能有构造方法,不能有普通方法),且接口类中所有未实现的方法需要在子类中全部实现
參考位址 https://www.cnblogs.com/smallrookie/p/6516010.html
#定義:從PHP 5.4.0 開始PHP 實作了新的程式碼重複使用方式。
<?php trait A { public function smallTalk() { echo 'a'; } public function bigTalk() { echo 'A'; } } trait B { public function smallTalk() { echo 'b'; } public function bigTalk() { echo 'B'; } } class Aliased_Talker { use A, B { B::smallTalk insteadof A; //使用B类的smallTalk方法(替换A方法) A::bigTalk insteadof B; B::bigTalk as talk;//重命名 B类中的bigTalk方法重命名为talk方法 } } $obj = new Aliased_Talker; $obj->smallTalk(); //b $obj->bigTalk(); //A $obj->talk();//B //trait不能实例化,不能有常量
相關推薦:
php物件導向介面,繼承,抽象類別,析構,複製等高階特性實例詳解
以上是抽象類別,介面,trait的詳細內容。更多資訊請關注PHP中文網其他相關文章!