オブジェクトのメンバ変数を参照する際、PHPでは $obj->element のように指定しますが、まれにelementの変数名にハイフン「-」が入ったものを指定しなければならない場合があります。

この場合、上記のような通常の参照方法は使用することができません。今回はこのような場合の参照方法を、simplexmlでXMLを扱う事例を使って解説します。

simplexmlを使用する際、XMLの構文から要素を参照するには通常は下のような書き方をします。

<?php
$string 
= <<<XML
    <?xml version='1.0' encoding="UTF-8"?>
    <document>
     <hoge>HOGE</hoge>
    </document>
XML;
$xml simplexml_load_string($string);
echo 
$xml->hoge;
?>

上記のように記述することで、$string変数内のXML構文hoge要素内の"HOGE"が表示されることになります。

ところが、このXMLの要素名にハイフン「-」が使用されている場合、通常の書き方では要素が参照できなくなってしまいます。

ためしに、XML部分を下記のように要素名をhoge-hogeに変更して試してみましょう。

<?xml version='1.0' encoding="UTF-8"?>
  <document>
  <hoge-hoge>HOGE</hoge-hoge>
  </document>

まずは$stringの部分をこのように書き換えます。

echo $xml->hoge-hoge;

上記の記述方法ではNoticeが発生するだけでスクリプトは実行されますが、実際には要素hoge-hogeは参照されず値は出力されません。

echo $xml->'hoge-hoge';

このようにhoge-hogeをシングルクォートで囲って記述すると、今度はSyntax errorになってしまいます。

このような状況を解決するには以下のような記述を行います。

<?php
    $string 
= <<<XML
    <?xml version='1.0' encoding="UTF-8"?>
    <document>
     <hoge-hoge>HOGE</hoge-hoge>
    </document>
XML;
$xml simplexml_load_string($string);
echo 
$xml->{'hoge-hoge'};
?>

このように、hoge-hogeを中括弧とクォーテーションで囲います。こうすることでハイフンが使われている要素名も参照できるようになります。もしオブジェクトを扱う際に行き詰まることがあったら思い出してみてください。



(アシアル 松田惇)


この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。