php--抽象類別

來源:互聯網
上載者:User
PHP 5 支援抽象類別和抽象方法。定義為抽象的類不能被執行個體化。任何一個類,如果它裡面至少有一個方法是被聲明為抽象的,那麼這個類就必須被聲明為抽象的。被定義為抽象的方法只是聲明了其調用方式(參數),不能定義其具體的功能實現。

繼承一個抽象類別的時候,子類必須定義父類中的所有抽象方法;另外,這些方法的存取控制必須和父類中一樣(或者更為寬鬆)。例如某個抽象方法被聲明為受保護的,那麼子類中實現的方法就應該聲明為受保護的或者公有的,而不能定義為私人的。此外方法的調用方式必須匹配,即類型和所需參數數量必須一致。例如,子類定義了一個選擇性參數,而父類抽象方法的聲明裡沒有,則兩者的聲明並無衝突。 這也適用於 PHP 5.4 起的建構函式。在 PHP 5.4 之前的建構函式聲明可以是不一樣的。

Example #1 抽象類別樣本

abstract class AbstractClass{    //強制要求子類定義這些方法    abstract protected function getValue();    abstract protected function prefixValue($prefix);    //普通方法(非抽象方法)    public function printOut()    {        print $this->getValue().'<br>';    }}class ConcreteClass1 extends AbstractClass{    protected function getValue()    {        return "ConcteteClass1";    }    public function prefixValue($prefix){        return "{$prefix}ConcreteClass1";    }}class ConcreteClass2 extends AbstractClass{    public function getValue(){        return "ConcreteClass2";    }    public function prefixValue($prefix){        return "{$prefix}ConcreteClass2";    }}$class1 = new ConcreteClass1;$class1 -> printOut();echo $class1->prefixValue('Foo_')."<br>";$class2 = new ConcreteClass2;$class2 -> printOut();echo $class2->prefixValue('Bar_')."<br>";

輸出結果:

ConcteteClass1

Foo_ConcreteClass1

ConcreteClass2

Bar_ConcreteClass2

Example #2 抽象類別樣本

abstract class AbstractClass{    //我們的抽象方法僅需要定義需要的參數     abstract protected function prefixName($name);}class ConcreteClass extends AbstractClass{    //我們的子類可以定義父類簽名中不存在的選擇性參數    public function prefixName($name,$separator='.'){        if($name == 'Pacman'){            $prefix = "Mr";        }elseif($name == 'Pacwoman'){            $prefix = 'Mrs';        }else{            $prefix = "";        }        return "{$prefix}{$separator} {$name}";    }}$class = new ConcreteClass;echo $class->prefixName('Pacman').'<br>';echo $class->prefixName('Pacwoman').'<br>';

輸出結果:

Mr. Pacman

Mrs. Pacwoman

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.