ITHACK
~ みんなのIT部門 ~

【PHP】self – 自クラスキーワード

自クラスを表すselfキーワードがあります。
selfキーワードはクラス内で使い、クラス名の代わりになります。

ここではselfキーワードについて解説します。

  • selfキーワード

selfキーワードとは

selfキーワードは自クラスを表すキーワードです。
クラス内で使い、selfは呼び出されたクラスを取得します。

基本構文

selfキーワードを使って、クラス変数、クラスメソッド、クラス定数にアクセスできます。

クラス変数

self::$クラス変数名

クラスメソッド

self::クラスメソッド名(引数値)

クラス定数

self::クラス定数名

サンプルコード

selfキーワードを使ったサンプルコードをご覧ください。

<?php

// クラス
class Bill {
    
    // 税率
    public const TAX = 0.1;
    
    // 割引率
    public static $discount = 0.15;
    
    // 料金
    public $price;
    
    // コンストラクタ
    public function __construct( $price ) {
        $this->price = $price;
    }
    
    // 税率を出力する
    public static function display_tax() {
        echo "税率   : ".self::TAX."\n";
    }
    // 割引率を出力する
    public static function display_discount() {
        echo "割引率  : ".self::$discount."\n";
    }
    
    // 合計金額を出力する
    public function total() {
        // 合計金額
        $total = $this->price * ( 1 - self::$discount ) * ( 1 + self::TAX );
        // 合計金額を出力
        echo "小計   : ".$this->price."\n";
        self::display_tax();
        self::display_discount();
        echo "合計   : ".$total."\n";
    }
    
}

// インスタンスの生成
$item = new Bill(1500);

// 合計金額を出力
$item->total();

?>
小計   : 1500
税率   : 0.1
割引率  : 0.15
合計   : 1627.5

selfキーワードを使ったアクセスについてクラス定数は22行目と32行目、クラス変数は26行目と32行目、クラスメソッドは35行目と36行目で行っています。

クラス名を記述する構文に比べて、クラス名の代わりにselfキーワードを使用しています。

演習問題

問題1

次の実行結果になる車クラスを扱うプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 車クラスを作成する
  • 車クラスのフィールドはナンバー、色、乗車人数とする
  • 車クラスのインスタンスの初期値はコンストラクタで設定する
  • タイヤ数はクラス変数とする
  • 車情報を出力するinfoメソッドを作成する
  • タイヤ数を出力するtires_infoメソッドを作成する
    ※ tires_infoはクラスメソッドとします。
  • クラス内でのクラス変数・クラスメソッドへのアクセスはselfキーワードを使う
===== 車情報 =====
ナンバー : 1234
色    : 紺色
乗車人数 : 5人
タイヤ数 : 4個
===== 車情報 =====
ナンバー : 0987
色    : 赤
乗車人数 : 2人
タイヤ数 : 4個

問題2

次の実行結果になる家クラスを扱うプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 家クラスを作成する
  • 家クラスのフィールドは面積(単位:畳)とする
  • 家クラスのインスタンスを3つ生成し、各面積(畳)は次の通りとする
    1つ目 : 6
    2つ目 : 14
    3つ目 : 30
  • 家クラスのインスタンスの初期値はコンストラクタで設定する
  • 畳の高さ(1.82m)と横幅(0.91m)を記憶するクラス定数を定義する
  • クラス定数を使って家の面積(平方メートル)を出力するareaメソッドを作成する
  • クラス内でのクラス定数へのアクセスはselfキーワードを使う
面積 : 9.9372平方メートル
面積 : 23.1868平方メートル
面積 : 49.686平方メートル

まとめ

selfキーワードはクラス内でクラス名の代わりになるキーワードです。
selfキーワードを使うと、クラス名が変わった場合でも、修正する必要がないため、コードに柔軟性を持たせることができます。