ITHACK
~ みんなのIT部門 ~

【PHP】フィールド – インスタンス内部の変数

クラスにはフィールドと呼ばれる変数を定義できます。
フィールドはインスタンスに値を記憶するために使います。

ここではフィールドについて解説します。

  • フィールド

フィールドとは

フィールドはインスタンスに値を持たせるための変数です。
別名も多く、『プロパティ』や『属性』、『メンバー変数』などと呼ばれることもあります。
※ 各呼び名での意味合いは若干異なることがあります。

基本構文

フィールドに関する基本構文は次の3つあります。

定義

class クラス名 {
    アクセス修飾子 $フィールド名;
}

フィールドを使うには、クラスに定義します。
このようにすることで、インスタンスの中に値を記憶することができるようになります。

また、複数個定義できるため、必要な数だけ増やすことができます。

アクセス修飾子については、publicprotectedprivateの3種類があります。
それぞれについては別の機会に解説します。ここでは3種類のどれかを記述するということを覚えておきましょう。

値の取得

$変数名→フィールド名

フィールドに記憶された値を取得するにはアロー演算子()を使います。
インスタンスを記憶している変数とフィールドをアロー演算子で繋げて記述します。

値の記憶

$変数名→フィールド名 = 値

フィールドに値を記憶するには、代入演算子(=)を使います。
左オペランド(代入演算子の左側)では、値の取得と同様にアロー演算子を使い、フィールドを指定します。
代入演算子と右オペランド(代入演算子の右側)は通常の変数と同様の記述です。

サンプルコード

フィールドのサンプルコードをご覧ください。

<?php

// クラス
class Person {
    
    // フィールド(名前)
    public $name;
    // フィールド(身長)
    public $height;
    // フィールド(年齢)
    public $age;
    
}

// インスタンス生成
$watanabe = new Person();

// 値の記憶
$watanabe->name = 'Watanabe You';
$watanabe->height = 157;
$watanabe->age = 16;

// 値の取得
echo "===== プロフィール =====\n";
echo "名前 : ".$watanabe->name."\n";
echo "身長 : ".$watanabe->height."cm\n";
echo "年齢 : ".$watanabe->age."歳\n";

?>
===== プロフィール =====
名前 : Watanabe You
身長 : 157cm
年齢 : 16歳

“人”を表現するクラスを使ったコードです。

各コードの概要は次のようになります。

行数 概要
4~13 “人”を表現するクラス
7,9,11 フィールドの定義
$name(名前) / $height(身長) / $age(年齢)
※ アクセス修飾子は、ここではpublicと記述するものとします。
16 インスタンス生成
19~21 フィールドに値を記憶
25~27 フィールドの値を取得

このようにクラスにフィールドを定義することでインスタンスからフィールドの値の取得や記憶ができるようになります。

インスタンスの記憶領域

インスタンスは複数生成でき、各インスタンスは個別の記憶領域を持ちます。
そのため、フィールドもそれぞれ別のものとして扱われるため、次のコードのように異なる値を記憶することができます。

<?php

// クラス
class Person {
    
    // フィールド(名前)
    public $name;
    // フィールド(身長)
    public $height;
    // フィールド(年齢)
    public $age;
    
}

// インスタンス生成と値の記憶
$watanabe = new Person();
$watanabe->name = 'Watanabe You';
$watanabe->height = 157;
$watanabe->age = 16;

// インスタンス生成と値の記憶
$nishikino = new Person();
$nishikino->name = 'Nishikino Maki';
$nishikino->height = 161;
$nishikino->age = 15;

// 値の取得
echo "===== プロフィール =====\n";
echo "名前 : ".$watanabe->name."\n";
echo "身長 : ".$watanabe->height."cm\n";
echo "年齢 : ".$watanabe->age."歳\n";
echo "===== プロフィール =====\n";
echo "名前 : ".$nishikino->name."\n";
echo "身長 : ".$nishikino->height."cm\n";
echo "年齢 : ".$nishikino->age."歳\n";

?>
===== プロフィール =====
名前 : Watanabe You
身長 : 157cm
年齢 : 16歳
===== プロフィール =====
名前 : Nishikino Maki
身長 : 161cm
年齢 : 15歳

Personクラスから2つインスタンスを生成(16行目と22行目)しています。
各インスタンスは異なる記憶領域になるため、個々に任意の値を記憶することが可能です。

実行結果からも別の値が記憶されていることが分かります。

演習問題

問題1

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

  • 車クラスを作成する
  • 車クラスのフィールドはナンバー、色、乗車人数とする
  • 出力は車クラスのインスタンスを使う
===== 車情報 =====
ナンバー : 1234
色    : 紺色
乗車人数 : 5人
===== 車情報 =====
ナンバー : 0987
色    : 赤
乗車人数 : 2人

問題2

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

  • 家クラスを作成する
  • 家クラスのフィールドは階数、間取り、完成日とする
  • 出力は家クラスのインスタンスを使う
===== 家情報 =====
階数  : 1階
間取り : 3LDK
完成日 : 2022/01/25
===== 家情報 =====
階数  : 3階
間取り : 10LDK
完成日 : 2020/03/24
===== 家情報 =====
階数  : 2階
間取り : 5LDK
完成日 : 2021/08/01

まとめ

フィールドはインスタンスに値を持たせる変数です。
クラスに定義することで、インスタンスでフィールドを使うことができるようになります。

クラスの基礎になりますので覚えていきましょう。