プロパティ
オブジェクトの特徴
動物の「名前」「鳴き声」など、オブジェクトの「特徴」をクラス定義したものをプロパティといいます。
- 名前 : アリス
- 職業 : 魔法使い
- 体力 : 30
プロパティ定義の例
プロパティ定義はオブジェクトの特徴にあわせて「プロパティ名」や「データ型」を決める必要があります。
項目 | プロパティ名 | データ型 |
---|---|---|
キャラクター名 | name | String |
職業 | job | String |
体力 | hp | int |
フィールドとプロパティの違い
プロパティのことをプログラムによってはフィールドともいいます。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 | わん! |