PHPプロ!TIPS+

ハイフン付きのメンバ変数名を参照する方法

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

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。

Tipsꗗy[W 

Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)