PHP基礎(chǔ)之類(lèi)和對(duì)象11——對(duì)象接口
接口是通過(guò)?interface?關(guān)鍵字來(lái)定義的,就像定義一個(gè)標(biāo)準(zhǔn)的類(lèi)一樣,但其中定義所有的方法都是空的。
接口中定義的所有方法都必須是公有,這是接口的特性。
實(shí)現(xiàn)(implements)要實(shí)現(xiàn)一個(gè)接口,使用?implements?操作符。類(lèi)中必須實(shí)現(xiàn)接口中定義的所有方法,否則會(huì)報(bào)一個(gè)致命錯(cuò)誤。類(lèi)可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)來(lái)分隔多個(gè)接口的名稱(chēng)。
Note:
實(shí)現(xiàn)多個(gè)接口時(shí),接口中的方法不能有重名。
Note:
接口也可以繼承,通過(guò)使用?extends?操作符。
Note:
類(lèi)要實(shí)現(xiàn)接口,必須使用和接口中所定義的方法完全一致的方式。否則會(huì)導(dǎo)致致命錯(cuò)誤。
常量接口中也可以定義常量。接口常量和類(lèi)常量的使用完全相同,但是不能被子類(lèi)或子接口所覆蓋。
范例Example #1 接口示例
interface ITemplate{ public function setVariable($name,$var); public function getHtml($template);}//實(shí)現(xiàn)接口//下面的寫(xiě)法是正確的class Template implements ITemplate{ private $vars = array(); public function setVariable($name,$var) {$this->vars[$name] = $var; } public function getHtml($template) {foreach($this->vars as $name => $value){ $template = str_replace(’{’.$name.’}’,$value,$template);}return $template; }}//下面的寫(xiě)法是錯(cuò)誤的,會(huì)報(bào)錯(cuò),因?yàn)闆](méi)有實(shí)現(xiàn)getHtml()class BadTemplate implements ITemplate{ private $vars = array(); public function setVariable($name,$var) {$this->vars[$name] = $var; }}
Example #2 可擴(kuò)充的接口
interface a{ public function foo();}interface b extends a{ public function baz(Baz $baz);}//正確寫(xiě)法class c implements b{ public function foo(){} public function baz(Baz $baz){}}//錯(cuò)誤寫(xiě)法class d implements b{ public function foo(){} public function baz(Foo $foo){}}
Example #3 繼承多個(gè)接口
interface a{ public function foo();}interface b{ public function bar();}interface c extends a,b{ public function baz();}class d implements c{ public function foo(){} public function bar(){} public function baz(){}}
Example #4 使用接口常量
interface a{ const b = 1;}//輸出接口常量echo a::b;//錯(cuò)誤寫(xiě)法class b implements a{ const b = 1;}
接口加上類(lèi)型約束,提供了一種很好的方式來(lái)確保某個(gè)對(duì)象包含有某些方法。參見(jiàn)?instanceof?操作符和類(lèi)型約束。
相關(guān)文章:
1. python爬蟲(chóng)實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊2. HTML 絕對(duì)路徑與相對(duì)路徑概念詳細(xì)3. .NET6打包部署到Windows Service的全過(guò)程4. 使用FormData進(jìn)行Ajax請(qǐng)求上傳文件的實(shí)例代碼5. 解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問(wèn)題6. Python編寫(xiě)nmap掃描工具7. 如何在jsp界面中插入圖片8. 基于javaweb+jsp實(shí)現(xiàn)企業(yè)財(cái)務(wù)記賬管理系統(tǒng)9. Ajax返回值類(lèi)型與用法實(shí)例分析10. .Net Core和RabbitMQ限制循環(huán)消費(fèi)的方法
