文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…
 
(同じ利用者による、間の1版が非表示)
266行目: 266行目:
<u>したがって、コンストラクタはクラスごとに1つのみ定義することができる。</u><br>
<u>したがって、コンストラクタはクラスごとに1つのみ定義することができる。</u><br>
<br><br>
<br><br>
== 継承 ==
継承は、既存のクラス (親クラス) の機能を新しいクラス (子クラス) に引き継ぐ機能である。<br>
<code>extends</code>キーワードを使用して継承を実装する。<br>
<br>
使用できるアクセス修飾子を以下に示す。<br>
* public
*: どこからでもアクセス可能
* protected
*: そのクラスと継承したクラスからアクセス可能
* private
*: そのクラス内からのみアクセス可能
<br>
PHPにおいて、継承で可能なことを以下に示す。<br>
* 親クラスのメソッドと属性を再利用
* メソッドのオーバーライド(上書き)
* 新しいメソッドや属性の追加
* <code>parent::</code>を使用して親クラスのメソッドにアクセス
<br>
PHPにおける継承の特徴を以下に示す。<br>
* PHPは単一継承のみをサポートする。<br>多重継承は不可。(1つのクラスは1つの親クラスしか持てない)
* インターフェースを使用することで複数の型を実装できる。
* <code>final</code>キーワードを使用することで継承を禁止できる。
<br>
finalキーワードを使用するシーンを以下に示す。<br>
* セキュリティ上の理由でメソッドの動作を固定する場合
* クラスの機能を拡張させたくない場合
* コアとなる機能の一貫性を保持する場合
<br>
<syntaxhighlight lang="php">
// class.phpファイル
// 基底クラス (親クラス)
class Animal
{
    protected $name;
    protected $age;
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age  = $age;
    }
    public function makeSound()
    {
      return "何かの音を出す";
    }
    public function getInfo()
    {
      return "名前: {$this->name}, 年齢: {$this->age}歳";
    }
}
// 派生クラス (子クラス)
// finalクラス : このクラスは継承不可
final class Dog extends Animal
{
    private $breed;
    public function __construct($name, $age, $breed)
    {
      parent::__construct($name, $age);
      $this->breed = $breed;
    }
    // メソッドのオーバーライド
    public function makeSound()
    {
      return "ワンワン!";
    }
    // 新しいメソッドの追加
    public function getBreed()
    {
      return $this->breed;
    }
    // 親クラスのメソッドを拡張
    public function getInfo()
    {
      return parent::getInfo() . ", 犬種: {$this->breed}";
    }
}
// 以下のコードはエラーになる
// Fatal error: Class SportsCar may not inherit from final class Car
//class SportsCar extends Car {
//  public function getType()
//  {
//      return "スポーツカー";
//  }
//}
</syntaxhighlight>
<br>
<syntaxhighlight lang="php">
// 使用例 : index.phpファイル
require_once(__DIR__ . '/class.php');
$dog = new Dog("ポチ", 3, "柴犬");
echo $dog->getInfo() . "\n";    // 名前: ポチ, 年齢: 3歳, 犬種: 柴犬
echo $dog->makeSound() . "\n";  // ワンワン!
</syntaxhighlight>
<br><br>


{{#seo:
{{#seo: