PHP オブジェクトのプロパティ名に $ が使われている場合のアクセス

はじめに

実務にて、PHP で object(MongoId)#1 (1) {[“$id”]=> string(3) “xxx”} のように、オブジェクトのプロパティ名に $ が含まれている場合にアロー演算子でアクセスできないという問題を解決した情報になります。ソースコードを模倣するだけで簡単に流用ができます。

ソースコード

$a->{'$b'};

検証環境

解説

アロー演算子と波括弧でアクセスできます。

検証する為に配列を生成します。

$obj = json_decode('{"$id":"19900119", "$name":"Tremors"}');

$obj を var_dump します。

object(stdClass)#4 (2) {
  ["$id"]=>
  string(8) "19900119"
  ["$name"]=>
  string(7) "Tremors"
}

下記のように $obj の $id と $name にアクセスできます。

$obj->{'$id'}
$obj->{'$name'}

以上です。

おわりに

PHP 7.4.x で推奨されなくなる機能 の中に「波括弧を使って配列や文字列のオフセットにアクセスする文法は推奨されません。$var{$idx} でなはく $var[$idx] を使って下さい。」という記述があります。今後の PHP バージョンアップによる仕様変更に注意する必要がありそうです。