PHP介面
PHP菜鳥
PHP介面(interface
)作用類似於繼承中的父類,介面是用於給其他的類繼承用的,但是介面中定義的方法都是沒有方法體的且定義的方法必須是公有的。
舉例:
<?php interface iTemplate{ public function eat($food); public function learn($code); } class student implements iTemplate{ public function eat($food){ echo "student eat {$food}"; } public function learn($code){ echo "student learn {$code}"; } } $student = new student(); $student->eat('apple'); echo '<br />'; $student->learn('PHP'); ?>
輸出:
student eat apple student learn PHP
介面中除了方法也是可以定義屬性的,但必須是常量。
<?php interface iTemplate{ public function eat($food); public function learn($code); const A='我是常量'; } class student implements iTemplate{ public function eat($food){ echo "student eat {$food}"; } public function learn($code){ echo "student learn {$code}"; } public function changliang(){ echo ITemplate::A; } } $student = new student(); $student->eat('apple'); echo '<br />'; $student->learn('PHP'); echo '<br />'; $student->changliang(); ?>
輸出:
student eat apple student learn PHP 我是常量
那麼既然是定義給其他類使用,就存在繼承的問題,介面是可以多繼承的。
舉例:
<?php interface iTemplate1{ public function eat($food); } interface iTemplate2{ public function learn($code); } class student implements iTemplate1,iTemplate2{ public function eat($food){ echo "student eat {$food}"; } public function learn($code){ echo "student learn {$code}"; } } $student = new student(); $student->eat('apple'); echo '<br />'; $student->learn('PHP'); ?>
輸出:
student eat apple student learn PHP
這樣就在student
類中繼承了iTemplate1
和iTemplate2
介面,話可以先讓iTemplate2
介面繼承iTemplate1
介面,再讓student
類去繼承iTemplate1
介面,實現的效果同上。
舉例:
<?php interface iTemplate1{ public function eat($food); } interface iTemplate2 extends iTemplate1{ public function learn($code); } class student implements iTemplate2{ public function eat($food){ echo "student eat {$food}"; } public function learn($code){ echo "student learn {$code}"; } } $student = new student(); $student->eat('apple'); echo '<br />'; $student->learn('PHP'); ?>
輸出:
student eat apple student learn PHP
總結一下:
- 介面不能例項化
- 介面中的方法不能有方法體
- 繼承介面的方法必須實現介面中的所有方法
- 一個類可以繼承多個介面
- 介面中的屬性必須是常量
- 介面中的方法必須是public(預設public)
不對的地方還望dalao們指正。