📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == クラスとは、何かを実行する物体の設計図のようなものである。<br> そして、クラスの仕様を決めるものがメソッド…」
 
 
(同じ利用者による、間の4版が非表示)
129行目: 129行目:
これにより、誤った使用を未然に防止することやメンバ変数とメソッドの意味を理解しやすくなる。<br>
これにより、誤った使用を未然に防止することやメンバ変数とメソッドの意味を理解しやすくなる。<br>
<br><br>
<br><br>
== メンバ変数へのアクセスとメンバメソッドからの値の取得 ==
アクセス修飾子を設定したメンバ変数へのアクセス方法について記載する。<br>
<br>
メンバ変数を外部から直接設定できる場合は不適切な値が代入できるため、<br>
メンバ変数をprivateにして、メンバ変数の変更はメソッド経由でのみ可能にする。<br>
メソッド経由で設定することで事前に値の範囲を確認することができるため、不適切な値が代入される危険性が無くなる。<br>
<br>
また、メンバ変数の値を取得できるメソッドを別途定義することで、メンバ変数の値を取得できるようにする。<br>
<syntaxhighlight lang="php">
class Television()
{
    private $channelNo;
    public function setChannel($channel)
    {
      if(($channel >= 1) and ($channel <= 12))
      {
          $this->channelNo = $channel;
      }
    }
    public function getChannel()
    {
      return $this->channelNo;
    }
}
$tv = new Television();
$tv->setChannelNo(20);
print('現在のチャンネルは'.$tv->getChannel());
</syntaxhighlight>
<br><br>
== クラス内の定数 ==
クラスでは、定数を定義することができる。<br>
<br>
構文は以下の通りである。<br>
<syntaxhighlight lang="php">
class クラス名
{
    const 定数名 = 値;
}
</syntaxhighlight>
<br>
通常の定数を定義する場合は<code>define</code>を使用するが、クラス内で定数を定義する場合は、<code>const</code>の後に定数名を指定して値を定義する。<br>
変数のように<code>$</code>マークは付かないことに注意すること。<br>
<br>
クラス内からクラス内の定数を参照するには、<code>self::定数名</code>のように記述する。<br>
<br>
<u>※注意</u><br>
<u>selfはカレントクラスを表す。($thisはインスタンス単位)</u><br>
<u>クラス内の定数は、クラス単位で設定されている値だからである。</u><br>
<syntaxhighlight lang="php">
class クラス名
{
    const 定数名 = 値;
    public function メソッド名()
    {
      print(self::定数名);
    }
}
</syntaxhighlight>
<br>
以下の例では、チャンネル番号を指定して、1〜12番の場合はチャンネル番号を表示、それ以外の場合はエラーを表示している。<br>
<syntaxhighlight lang="php">
$tv = new Television();
$tv->setChannel(20);
print('現在のチャンネルは'.$tv->getChannel().'<br>');
$tv->setChannel(10);
print('現在のチャンネルは'.$tv->getChannel().'<br>');
class Television
{
    private $channelNo = 8;
    const MAX_CHANNEL = 12;
    const MIX_CHANNEL = 1;
    const ERROR_MSG = 'チャンネルは1から12の間で設定して下さい<br>';
    public function setChannel($channel)
    {
      if(($channel >= self::MIX_CHANNEL) && ($channel <= self::MAX_CHANNEL))
      {
          $this->channelNo = $channel;
      }
      else
      {
          print(self::ERROR_MSG);
      }
    }
    public function getChannel()
    {
      return $this->channelNo;
    }
}
</syntaxhighlight>
<br><br>
== コンストラクタ ==
コンストラクタとは、クラスからインスタンスを生成する時に自動的に呼び出されるメソッドである。<br>
インスタンス生成時において、コンストラクタに初期化処理等を記述することで、自動的に実行される。<br>
<br>
コンストラクタの構文は以下の通りである。<br>
メソッド名を<code>__construct</code>と記述することで、コンストラクタとなる。<br>
<syntaxhighlight lang="php">
class クラス名
{
    public function __construct(変数, 変数, ...)
    {
      // コンストラクタ内で実行する処理
    }
}
</syntaxhighlight>
<br>
以下の例では、コンストラクタの使用例である。<br>
<syntaxhighlight lang="php">
$tv = new Television();
class Television
{
    private $channelNo;
    public function __construct($channel)
    {
      $this->channelNo = $channel;
    }
}
</syntaxhighlight>
<br>
<u>※注意</u><br>
<u>PHPにおいて、コンストラクタを複数定義することができない。</u><br>
<u>したがって、コンストラクタはクラスごとに1つのみ定義することができる。</u><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:
|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 page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:Web]]
[[カテゴリ:Web]]