【PHP】クラス、メソッド、プロパティの動的コール
目次
動的アクセス
プロパティに対しての動的アクセス
通常の場合、複数あるプロパティの変数にアクセスしたい場合、以下のように書きます。
1 |
|
例
以下のようなアイテムクラスの一覧を列挙したい1
2
3
4
5
6
7
8
9
10
11
12
13
14class Item{
// 名前
public string $name;
// 値段
public int $price;
// 重さ
public int $weight;
function __construct(string $name,int $price,int $weight){
$this->name = $name;
$this->price = $price;
$this->weight = $weight;
}
}
表示するには、1つずつのプロパティを呼び出して記述する必要がある1
2
3
4
5
6$item = new Item('チーズ',300,100);
// 表示
echo '名前' ,':', $item->name,'<br>';
echo '値段' ,':', $item->price,'<br>';
echo '重さ' ,':', $item->weight,'<br>';
問題点は2つ
- プロパティ名と表示したい名前の結びつきがわかりにくい
- プロパティ数が多いと行が増えていき可読性が下がる
動的アクセスを使った場合
使うクラスは、最初のItemクラスと同じものを使う。
このように、Itemクラスに変数が増えたとしても、properties連想配列に組み合わせを追加するだけで、表示を追加できる様になる1
2
3
4
5
6
7
8
9
10
11
12
13
14// 最初にプロパティを定義する
$properties=[
'name' => '商品名',
'price' => '金額',
'weight' => '重さ'
];
$item = new Item('チーズ',300,100);
// プロパティのループ
foreach($properties as $propertie=>$label){
// $インスタンス名->{$プロパティ名を持つ変数名}
echo $label ,':', $item->{$propertie},'<br>';
}
メソッドの動的コール
1 |
|
メソッドの動的コールを行う際は、method_exists
を使用して呼び出したいメソッドをインスタンス化したクラスが持っているかをチェックしたほうがいい
1 |
|
クラスの動的コール
通常のクラスのインスタンス化との違いは、クラス名の前に$
があること1
$newInstance = new $メソッド名();
クラスの動的コールを行う際は、class_exists
を使用してインスタンス化したいクラス存在しているかチェックしたほうがいい
1 |
|
【PHP】クラス、メソッド、プロパティの動的コール
https://daiki-iijima.github.io/2021/05/18/【PHP】クラス、メソッド、プロパティの動的コール/