PHPで非常に興味深い問題が発生しています。次のコードは、テキストファイルから行を取得し、そのテキストをjsonとしてstdClassオブジェクトにデコードしてから、そのプロパティの1つで条件付きで配列に配置します。
$fileStream = @fopen($fileName, 'r+');
$lastUpdate = $_POST['lastUpdate'];
if($fileStream) {
$eventArray = array();
while (($buffer = fgets($fileStream, 8192)) !== false) {
$decodedEvent = json_decode($buffer);
echo var_dump($decodedEvent);
if ($decodedEvent->timestamp > $lastUpdate) {
array_push($eventArray, $decodedEvent);
}
}
$jsonEvents = json_encode($eventArray);
echo $jsonEvents;
}
else {
$fileStream = @fopen($fileName, 'a');
}
@fclose($fileStream);
これにより、エラーが発生します。
Notice:Trying to get property of non-object in C:\****\gameManager.php on line 23
オブジェクトが複数の方法で有効であることを私は知っています。たとえば、var_dumpはこれを生成しています:
object(stdClass)#1 (3) {
["name"]=>
string(4) "move"
["args"]=>
array(3) {
[0]=>
int(24)
[1]=>
int(300)
[2]=>
int(50)
}
["timestamp"]=>
float(1352223678463)
}
を使用して$decodedEventにアクセスしようとすると$decodedEvent["timestamp"]
、オブジェクトに配列としてアクセスできないというエラーが表示されます。
また、実際には適切なjsonをエコーしますが、これは適切なオブジェクトからのみエンコードできます。
[{"name":"move","args":[24,300,50],"timestamp":1352223678463}]
ここで何かが足りないのですか、それともPHPの動作がおかしいのですか?どんな助けでも大歓迎です。
編集:ファイルからの入力は次のとおりです。
{"name":"move","args":[24,300,50],"timestamp":1352223678463}