Help us understand the problem. What is going on with this article?

PHPの継承について(extends,abstract編)

開発をする上で疎結合(そけつごう)なコードで書くことは重要です。
そこで、今回はphpの継承(抽象化)のextendsとabstractについて簡単にまとめようと思います。

簡単な図↓

名称未設定のノート-1.jpg

1.クラスの継承 (extends)について

継承では、親クラスのメソッドを上書きすることができます。
継承する基のクラスをスーパークラス(もしくは親クラス)、継承して新たに作られるクラスをサブクラス(もしくは子クラス)と呼びます。

【構文】

class サブクラス名(子クラス) extends スーパークラス名(親クラス)
{
}

1.スーパークラス名の後にextends をつけて、継承させたいクラス名を書く
2.継承したクラスとメソッド(関数)の名前が重なっていたら、サブクラス側を優先する(上書き(オーバーライド))

例↓
 <?php
class Sports
 {
 //名前のプロパティ
 private $name = "";
 //名前のゲッタ
 public function getName(): string
 {
 return $this->name;
 }
 //名前のセッタ
 public function setName(string $name): void
 {
 $this->name = $name;
 }
}
//出力結果

<?php
 class Tennis extends Sports 
 {
 public function call(): string
 {
 return “ゲーム1";
 }
}
継承すると親のメンバーを全て引き継ぎます。

Phpファイル作成 

 <?php
 require_once("Sports.php");
 require_once("Tennis.php");
 $clubs = new Tennis(); 
 $clubs->setName(“テニス部"); 
 print($clubs->getName()."は".$clubs->call().”の試合をしています"); 
//出力結果
テニス部はゲーム1の試合をしています

注意点

PHPの継承では、親クラスとして指定できるのは1つだけであり、親クラスを複数指定できません。

上記のコードのように、実行部分で直接利用していないクラスでも、親クラスとして指定している場合は、そのクラスが記述されたファイルをrequire_onceで読み込んでおく必要があります。
また、順番は親クラスが先に読み込まれるようにしないといけません。

2.抽象クラス (abstract) 不要論について

抽象クラスは継承前提のクラスで、インスタンス化(new)はできません。

[決まりごと]
①継承クラスは abstract で始める
②functionの前にabstractをつけると、継承されたクラスで必ず指定する必要がある
(この場合、functionの中身は書かない)
③abstractなしの関数も書ける (こちらは継承クラスで使わなくても問題なし)

例↓

<?php


//抽象クラス 頭に abstractをつけて class指定
abstract class MusicClass{

  //頭にabstractをつけてメソッド(関数)を指定。この場合は中身をかいたらいけません。
  abstract public function Piano();

  public function Electone($str){
    echo $str.'抽象クラスです。';
  }
}

//親クラス extendsをつけて継承している
class InstrumentClass extends MusicClass{

  public function Piano(){
    echo 'Pianoは親クラスです';
  }

}

//インスタンスを生成
$instrument = new InstrumentClass();

//メソッドの呼出し
$instrument->Piano();
$instrument->Electone('Electoneは');

?>

ほとんど普通のクラスと変わらないですが、abstractをつけると使えるメソッドを絞ることができ、abstractをつけないとインスタンス化ができません。

prog-ac
神戸プログラミングアカデミーは「本気でデキるプログラマになる」と決意した人限定のコミュニティです。
https://www.prog-ac.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away