13

(PHPで)オブジェクトを取得しましたが、コンテンツを印刷できません。デバッグモードでは、次のようになります。

stdClass Object
(
    [pre-selection] => 1
)

しかし、マイナス記号が原因で「事前選択」を印刷できません。

echo $object->pre-selection; //doens't work.

これを印刷するにはどうすればよいですか?ありがとう。

4

2 に答える 2

39

あなたは試すことができます

$object->{'pre-selection'};

http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

の例 2 も参照してください。json_decode()

例2 無効なオブジェクト プロパティへのアクセス

PHP の命名規則で許可されていない文字 (ハイフンなど) を含むオブジェクト内の要素にアクセスするには、中かっことアポストロフィで要素名をカプセル化します。

<?php

$json = '{"foo-bar": 12345}';

$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345

?>

更新 (salathe に感謝):

プロパティ名を明確に区切るために、中括弧を使用することもできます。これらは、配列を含むプロパティ内の値にアクセスする場合、プロパティ名が複数の部分で構成されている場合、またはプロパティ名に他の方法では有効でない文字が含まれている場合に最も役立ちます。

于 2012-08-13T18:34:21.587 に答える
7

複数の方法があります。問題は、PHP-トークナイザーがコード内の記号を詰まらせることですが、パーサーが文句を言わないように書くことはできます。

echo $object->{'pre-selection'};

また

$property = 'pre-selection'
echo $object->$property;

また

$array = (array) $object;   
echo $array['pre-selection'];

このような場合、PHP パーサーは、生のコード内で解析に問題のある場所については実行されなくなります。


これがどこに文書化されているのだろうか。たとえば、SimpleXML ドキュメントの場合:

PHP の命名規則で許可されていない文字 (ハイフンなど) を含む XML ドキュメント内の要素にアクセスするには、中かっことアポストロフィで要素名をカプセル化します。

例3 <line> の取得

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

echo $movies->movie->{'great-lines'}->line;
?>

上記の例では、次のように出力されます。

PHP solves all my web problems
于 2012-08-13T18:37:19.087 に答える