「PHPの基礎 - クラス」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == クラスとは、何かを実行する物体の設計図のようなものである。<br> そして、クラスの仕様を決めるものがメソッド…」)
 
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>
== クラス内の定数 ==
クラスでは、定数を定義することができる。
構文は以下の通りである。
<syntaxhighlight lang="php">
class クラス名
{
    const 定数名 = 値;
}
</syntaxhighlight>
<br>
通常の定数を定義する場合はdefineを使用するが、クラス内で定数を定義する場合は、constの後に定数名を指定して、値を定義する。
変数のように$マークは付かないことに注意すること。
クラス内からクラス内の定数を参照するには、self::定数名のように記述する。
※注意
selfはカレントクラスを表す。($thisはインスタンス単位)
クラス内の定数は、クラス単位で設定されている値だからである。
<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>


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

2021年3月3日 (水) 17:48時点における版

概要

クラスとは、何かを実行する物体の設計図のようなものである。
そして、クラスの仕様を決めるものがメソッドとメンバ変数である。

ここでは、メソッドとメンバ変数の記述方法やその他で記述可能なものについて記載する。


クラスの定義

クラスの定義を以下に示す。

 class クラス名
 {
    // ...略
 }


クラスからインスタンスを生成するには、new演算子を使用する。

変数名 = new クラス名(引数);



メンバ変数とメソッド

クラスには、値を保存するためのメンバ変数とクラスで行う処理を記述するメソッドがある。

メンバ変数は、クラス内で値を保持するために使用する。
メンバ変数の記述方法は、以下の通りである。

 class クラス名
 {
    アクセス修飾子 メンバ変数名;
 }


メソッドは、設計したクラスで実行する処理を関数の形で記述する。
メソッドの記述方法は、以下の通りである。

 class クラス名
 {
    アクセス修飾子 function メソッド名()
    {
       // メソッドで行う処理
    }
 }


以下の例では、テレビクラスを定義している。

 class Television
 {
    private $channelNo;
 
    public function dispChannel()
    {
       print('現在のチャンネルは'.$this->channelNo);
    }
 }
 
 $tv = new Television();


以下の例では、テレビクラスのインスタンスを生成して、メンバ変数にチャンネル番号を代入している。

 $tv = new Television();
 $tv->channelNo = 8;


以下の例では、クラスのメソッドを実行している。

 $tv = new Television();
 $tv->channelNo = 8;
 $tv->dispChannel();



引数があるメソッド

メソッドには引数をとることもできる。

 class クラス名
 {
    アクセス修飾子 function メソッド名(引数1, 引数2, ...)
    {
       // クラスの中で行う処理
    }
 }


なお、クラス内でメンバ変数にアクセスする場合は、thisを使用して以下のように記述する。

$this->メンバ変数名;


以下の例では、テレビクラスび新しいチャンネルを設定するメソッドを定義している。
setChannelメソッド内で、引数で渡された値をメンバ変数に代入して、クラス内のdispChannelメソッドを実行して、チャンネルを表示している。

 class Television
 {
    private $channelNo;
 
    private function dispChannel()
    {
       print('現在のチャンネルは'.$this->channelNo);
    }
 
    public function setChannel($channel)
    {
       $this->channelNo = $channel;
       $this->dispChannel();
    }
 }
 
 $tv = new Television();
 $tv->setChannel(5);



アクセス修飾子

アクセス修飾子とは、メンバ変数やメソッドのアクセス可能な範囲を指定するもので、publicprivateprotectedの3種類がある。
アクセス修飾子を指定しない場合は、publicが指定されたものとみなされる。

各アクセス修飾子のアクセス権は、以下の通りである。

  • public
    クラス内、クラス外のどこからでもアクセス可能。
  • private
    同じクラス内からのみアクセス可能。
  • protected
    同じクラス、及び子クラスからアクセス可能。
    protectedはクラスを継承する場合に関係するものである。


アクセス修飾子は、クラス外には見せたくない情報を守ることができる。
また、外部から直接呼び出す必要が無いメソッドに対しても、呼び出せないようにすることも明確にできる。

これにより、誤った使用を未然に防止することやメンバ変数とメソッドの意味を理解しやすくなる。


メンバ変数へのアクセスとメンバメソッドからの値の取得

アクセス修飾子を設定したメンバ変数へのアクセス方法について記載する。

メンバ変数を外部から直接設定できる場合は不適切な値が代入できるため、
メンバ変数をprivateにして、メンバ変数の変更はメソッド経由でのみ可能にする。
メソッド経由で設定することで事前に値の範囲を確認することができるため、不適切な値が代入される危険性が無くなる。

また、メンバ変数の値を取得できるメソッドを別途定義することで、メンバ変数の値を取得できるようにする。

 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());



クラス内の定数

クラスでは、定数を定義することができる。

構文は以下の通りである。

 class クラス名
 {
    const 定数名 = ;
 }


通常の定数を定義する場合はdefineを使用するが、クラス内で定数を定義する場合は、constの後に定数名を指定して、値を定義する。 変数のように$マークは付かないことに注意すること。

クラス内からクラス内の定数を参照するには、self::定数名のように記述する。

※注意 selfはカレントクラスを表す。($thisはインスタンス単位) クラス内の定数は、クラス単位で設定されている値だからである。

 class クラス名
 {
    const 定数名 = ;
 
    public function メソッド名()
    {
       print(self::定数名);
    }
 }


以下の例では、チャンネル番号を指定して、1〜12番の場合はチャンネル番号を表示、それ以外の場合はエラーを表示している。

 $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;
    }
 }