PHP 對於 class 的使用方式很多,在這邊做一下筆記整理。
Basic
<?php class Main { public function foo() { echo 'foo'; } } class Sub extends Main { public function bar() { echo 'bar'; } } $sub = new Sub; $sub->bar(); // bar $sub->foo(); // foo
這是最基本的 class 應用,Sub
extends 了 Main
,因此可以在 Sub
拿到 protected
以及 public
的變數以及使用 function。
Interface
<?php interface Main { public function foo(); } class Sub implements Main { public function bar() { echo 'bar'; } } $sub = new Sub; $sub->bar(); // bar
interface 是規範 class 一定要有對應的 function 宣告,所以上面的例子退吐出下列的錯誤訊息。
Fatal error: Class Sub contains 1 abstract method and must therefore be declared abstract or implement the remaining methods
我們只要宣告一個同等名稱的 function 即可。
<?php interface Main { public function foo(); } class Sub implements Main { public function foo() { } public function bar() { echo 'bar'; } } $sub = new Sub; $sub->bar(); // bar
interface
本身是不可以下功能的,所以通常設計來當作一種使用規範。
abstract
<?php abstract class Main { abstract public function foobar(); public function foo() { echo 'foo'; } } class Sub extends Main { public function bar() { echo 'bar'; } } $sub = new Sub; $sub->foo(); // foo $sub->bar(); // bar
abstract
等於 basic
用法跟 interface
用法的集合,所以上述的內容會吐出錯誤訊息。
Fatal error: Class Sub contains 1 abstract method and must therefore be declared abstract or implement the remaining methods
此時我們要在 Sub
加上對應的 function name。
<?php abstract class Main { abstract public function foobar(); public function foo() { echo 'foo'; } } class Sub extends Main { public function foobar() { } public function bar() { echo 'bar'; } } $sub = new Sub; $sub->foo(); // foo $sub->bar(); // bar
traits
<?php trait Main { public function foo() { echo 'foo'; } } class Sub { use Main; public function bar() { echo 'bar'; } } $sub = new Sub; $sub->foo(); // foo $sub->bar(); // bar
trait
是一個有趣的東西,他可以透過 use
的方式直接調用 class,彈性無比的大,但確切的使用時機目前我還不清楚。
大亂鬥
<?php abstract class Cool { abstract public function foo3(); public function foo2() { echo 'foo2'; } } interface Happy { public function foo4(); } interface Smile { public function foo5(); } trait Main { public function foo() { echo 'foo'; } } class Sub extends Cool implements Happy, Smile { use Main; public function bar() { echo 'bar'; } public function foo3() { } public function foo4() { } public function foo5() { } } $sub = new Sub; $sub->foo(); // foo $sub->bar(); // bar $sub->foo2(); // foo2
沒有留言:
張貼留言