読者です 読者をやめる 読者になる 読者になる

モノノフ日記

普通の日記です

Array→Objectにキャスト

php


stdClass Object
(
[0] => hoge
[1] => moge
[2] => fuga
)

echo $o->0;
=>
Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'
この場合どうやってアクセスすればいいのかな。わからずー。

cucumberグループ

たぶんアクセスできないんじゃないでしょうか。プログラミングPHP P.48にこう書いてあります。

識別子として有効でないキーは無効なプロパティ名に変換されるので、オブジェクトにキャストするとアクセスできなくなります。しかし、それを配列にキャストし直すとアクセスできるようになります。

オブジェクトのプロパティ名っていうのは、いわゆるオブジェクト内の変数名。変数名はPHPマニュアルに書かれているように、

変数名は、PHPの他のラベルと同じルールに従います。 有効な変数名は文字またはアンダースコアから始まり、任意の数の文字、 数字、アンダースコアが続きます。正規表現によれば、これは次の ように表現することができます。 '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

PHP: 変数 - Manual

というルールがあるので、上のソースをキャストすると数字から始まってしまうため、無効なプロパティ名と判断されるんじゃないかなー、と予想してます。

foreachとか使えば、直アクセスできないけど順に中身は取り出せました。

<?php
foreach($o as $key => $item) {
    echo "key: ".$key.", value: ".$item.PHP_EOL;
}

あと、スーパーpre記法内で<?phpを先頭につけるとphpのsyntax有効になってみやすくなりますよ!