PHPの基礎 - クラス

提供:MochiuWiki : SUSE, EC, PCB
2021年3月3日 (水) 16:46時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == クラスとは、何かを実行する物体の設計図のようなものである。<br> そして、クラスの仕様を決めるものがメソッド…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

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

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


クラスの定義

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

 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はクラスを継承する場合に関係するものである。


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

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