プロパティ

オブジェクトの特徴

動物の「名前」「鳴き声」など、オブジェクトの「特徴」をクラス定義したものをプロパティといいます。

  • 名前 : アリス
  • 職業 : 魔法使い
  • 体力 : 30

プロパティ定義の例

プロパティ定義はオブジェクトの特徴にあわせて「プロパティ名」や「データ型」を決める必要があります。

項目 プロパティ名 データ型
キャラクター名 name String
職業 job String
体力 hp int

フィールドとプロパティの違い

プロパティのことをプログラムによってはフィールドともいいます。PHPのマニュアルではプロパティを推奨しています。

PHP公式:プロパティ

プロパティの定義

メンバー変数

クラス内に定義する変数をメンバー変数といいます。OOPではインスタンスを作成して扱うメンバー変数(staticでない)のことを指し、インスタンス変数ともいいます。

public class クラス名 {
    //プロパティ定義
    修飾子 データ型 変数名;
}

アクセス修飾子

アクセス修飾子を使うと「クラス」「プロパティ」「メソッド」のアクセスを外部プログラムから制限します。

アクセス修飾子 範囲
public すべてのクラスからアクセス(アクセス修飾子がない場合 public)
protected 自分のクラスとサブクラスからアクセス
なし publicと同じ
private 自分のクラスからだけアクセス

クラスの生成

Characterクラスにプロパティ 「name」「job」「hp」を定義します。

<?php
class Character
{
    public string $name;
    public string $job;
    public int $hp;
}

プロパティのアクセス

プロパティはインスタンスオブジェクトに「 -> 」をつけてアクセスします。メンバー変数のアクセスはプロパティ名で指定します。

インスタンス->プロパティ名

Characterクラスのプロパティは、アクセス修飾子が「public」になっているので外部からアクセス可能です。

$character->name

プロパティデータの確認

メインプログラムから、Characterオブジェクトのプロパティデータを確認してみましょう。

character_action.php
<?php
require_once "models/Character.php";

$wizard = new Character();

echo $wizard->name;
echo PHP_EOL;
echo $wizard->job;
echo PHP_EOL;
echo $wizard->hp;
echo PHP_EOL;
結果

Fatal error になりました。これは、Characterクラスのプロパティにデータ設定されていないのが原因です。

Fatal error: Uncaught Error: Typed property Character::$name must not be accessed before initialization in ...

プロパティの利用

プロパティにデータを代入

プロパティのデータは「 = 」で代入できます。

$wizard->name = "アリス";

プロパティデータの更新と確認

Characterオブジェクトのプロパティに、データを代入して確認してみましょう。

character_action.php
<?php
require_once "models/Character.php";

$wizard = new Character();
$wizard->name = "アリス";
$wizard->job = "wizard";
$wizard->hp = 30;

echo $wizard->name;
echo PHP_EOL;
echo $wizard->job;
echo PHP_EOL;
echo $wizard->hp;
echo PHP_EOL;
結果

プロパティのデータが表示できました。

アリス
wizard
30

演習

問題1

Animalクラスを作成し、つぎの内容でプロパティを定義してみましょう。

項目 プロパティ名 データ型 アクセス修飾子
種別 type String public
名前 name String public
鳴き声 crying String public

問題2

メインプログラム「animal_action.php」を作成し、Animalインスタンスを生成してみましょう。

プログラム例

$dog = new Animal();

問題3

Animalインスタンスに、つぎの内容でプロパティデータを更新して確認してみましょう。

項目 プロパティ名
種別 type dog
名前 name タロー
鳴き声 crying わん!

PHP超入門