WEBLOG
PHP > PHP一般
php のオブジェクト型は便利なのでよく使用しますが、php object型 の説明で class を用いて説明しておられるサイトがよくありますが、class = object型 では、ありません。
object は string や int 、booolen のような型で、classでなくても使用できます。また、配列とも違います。
違いますが、ほぼ同じです。
// 配列
$arr = [
'a' => 'A',
'b' => 'B',
'bb' => 'BB',
];
// オブジェクト
$obj = (object) [
'a' => 'A',
'b' => 'B',
'bb' => 'BB',
];
それぞれを表示する場合
// 配列
echo $arr['a'];
// オブジェクト
echo $obj->a;
上記を array_column する場合も array_keys する場合も記述は同じで、同じ値が返ってきます。。
$res1 = array_keys($arr);
$res2 = array_keys($obj);
foreach($arr as $k => $v) {
$v = 'add_' . $v;
}
var_dump($arr);
foreach($obj as $k => $v) {
$v = 'add_' . $v;
}
var_dump($obj);
上記の dump した結果は異なります。
$arr は、もとの値が返ってくるのに対し、$obj->a は、add_A、$obj->b は、add_B が返ってきます。
class のインスタンスを作成したとき、プロパティも同じ挙動ですので納得です。
下記のように記述すると $res3、$res4 は同じ値が返ってきます。
$b = 'b';
$res3 = $arr[$b];
var_dump($res3);
$res4 = $obj->{$b};
var_dump($res4);
下記の $res6 は正しい値がとれません。エラーなります。
$res5 と $res7 は同じ値です。
$b = 'b';
$res5 = $arr['b' . $b];
var_dump($res3);
$res6 = $obj->b . {$b};
var_dump($res6);
$res7 = $obj->{'b' . $b};
var_dump($res7);
twig(symfony系)、blade(Larabel)、php(WordPress)とViewの形式は色々ありますが、できるだけ View を統一したいという思いから、弊社では、オブジェクト型で統一しています。
{{ $res->a }}
<?= $res->a ?>
PHP(WordPress)でも <?php echo $res->a; ?> とは記述せずに、上記を使用しています。