PHPの継承について(extends,abstract編)
開発をする上で疎結合(そけつごう)なコードで書くことは重要です。
そこで、今回はphpの継承(抽象化)のextendsとabstractについて簡単にまとめようと思います。
簡単な図↓
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をつけないとインスタンス化ができません。
Author And Source
この問題について(PHPの継承について(extends,abstract編)), 我々は、より多くの情報をここで見つけました https://qiita.com/mayu_w1223/items/fbc72feecc432938b8b5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .