TECH I.S.

PHP OOP - 継承


PHP - 継承とは?

OOPでの継承 = クラスが別のクラスから派生する場合。

子クラスは、親クラスからすべての公開および保護されたプロパティとメソッドを継承します。さらに、独自のプロパティとメソッドを持つことができます。

継承クラスは、extendsキーワードを使い定義します。

例を見てみましょう:

<?php class Fruit {   public $name;   public $color;   public function __construct($name, $color) {     $this->name = $name;     $this->color = $color;   }   public function intro() {     echo "The fruit is {$this->name} and the color is {$this->color}.";   } } // Strawberry is inherited from Fruit class Strawberry extends Fruit {   public function message() {     echo "Am I a fruit or a berry? ";   } } $strawberry = new Strawberry("Strawberry", "red"); $strawberry->message(); $strawberry->intro(); ?>

例の説明

StrawberryクラスはFruitクラスから継承されます。

つまり、Strawberryクラスはpublic $nameプロパティと$color プロパティ、および継承によりFruitクラスのpublic __construct()メソッドとintro()メソッドを使用できます。

Strawberryクラスには独自のメソッドmessage()もあります。


PHP - 継承とProtected Access Modifier

前の章で学んだことは、protectedプロパティまたはメソッドには、クラス内およびそのクラスから派生したクラスからアクセスできます。それはどういう意味ですか?

例を見てみましょう:

<?php class Fruit {   public $name;   public $color;   public function construct($name, $color) {     $this->name = $name;     $this->color = $color;   }   protected function intro() {     echo "The fruit is {$this->name} and the color is {$this->color}.";   } } class Strawberry extends Fruit {   public function message() {     echo "Am I a fruit or a berry? ";   } } // Try to call all three methods from outside class $strawberry = new Strawberry("Strawberry", "red");  // OK. construct() is public $strawberry->message(); // OK. message() is public $strawberry->intro(); // ERROR. intro() is protected ?>

上記の例では、protectedメソッド(intro())をクラス外から実行すると、エラーが発生します。publicメソッドはうまくいきます!

別の例を見てみましょう。

<?php class Fruit {   public $name;   public $color;   public function construct($name, $color) {     $this->name = $name;     $this->color = $color;   }   protected function intro() {     echo "The fruit is {$this->name} and the color is {$this->color}.";   } } class Strawberry extends Fruit {   public function message() {     echo "Am I a fruit or a berry? ";     // Call protected method from within derived class - OK     $this -> intro();   } } $strawberry = new Strawberry("Strawberry", "red"); // OK. construct() is public $strawberry->message(); // OK. message() is public and it calls intro() (which is protected) from within the derived class ?>

上の例では、すべてが正常に動作していることがわかります。これは、派生クラス内からprotectedされたメソッド(intro())を呼び出しているためです。


PHP - 継承されたメソッドのオーバーライド

継承されたメソッドは、子クラスでメソッドを再定義する(同じ名前を使用する)ことでオーバーライドできます。

以下の例を見てください。子クラス(Strawberry)の__construct()およびintro()メソッドは、親クラス (Fruit)の__construct()およびintro()メソッドをオーバーライドします。

<?php class Fruit {   public $name;   public $color;   public function construct($name, $color) {     $this->name = $name;     $this->color = $color;   }   public function intro() {     echo "The fruit is {$this->name} and the color is {$this->color}.";   } } class Strawberry extends Fruit {   public $weight;   public function construct($name, $color, $weight) {     $this->name = $name;     $this->color = $color;     $this->weight = $weight;   }   public function intro() {     echo "The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} gram.";   } } $strawberry = new Strawberry("Strawberry", "red", 50); $strawberry->intro(); ?>


PHP - 最後のキーワード

finalキーワードを使用して、クラスの継承を防止したり、メソッドのオーバーライドを防止したりできます。

次の例は、クラスの継承を防ぐ方法を示しています。

<?php final class Fruit {   // some code } // will result in error class Strawberry extends Fruit {   // some code } ?>

次の例は、メソッドのオーバーライドを防ぐ方法を示しています。

<?php class Fruit {   final public function intro() {     // some code   } } class Strawberry extends Fruit {   // will result in error   public function intro() {     // some code   } } ?>



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細