PHPプロ!TIPS+

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

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

2. デザイナーさんもバージョン管理

Webシステムの構築には、多くの人が携わり、その職種は様々です。

その中で、ソースコードに手を加える職種は主にデザイナー(HTMLコーダー)とプログラマ。私たちプログラマは、バージョン管理システムを使います。複数人での開発において、バージョン管理システム無しに、プロジェクトの成功は有り得ないと言っても過言では無いでしょう。

ここで紹介するバージョン管理システムは、
Subversion(http://subversion.tigris.org/)と言って、少し前に主流だったCVSの改良版です。これらは一般的にコマンドを使って操作を行いますが、デザイナーさんでも簡単に操作出来るTortoiseSVN(http://tortoisesvn.tigris.org/)というツールがあります。これはWindows上でグラフィカルに操作する事が出来、非常に便利なのでプログラマがこれを使用する事も少なくありません。

Subversionコマンド(svnコマンド)とTortoiseSVNを使った作業の流れを見ていきましょう。

0.リポジトリという概念

バージョン管理システムには「リポジトリ」という概念があり、そのリポジトリに全てのファイルやソースコードを細かくバージョン分けして保持しています。

1.まずチェックアウト

作業者は、リポジトリからプロジェクトに関わる最新のソースコードを全て取得します。これをチェックアウトと呼びます。 チェックアウトは、通常はプロジェクトにかかわる一番最初に一度だけ行います。

- コマンドでチェックアウトを行う場合

$ svn checkout https://example.com/repositoryurl

- TortoiseSVNでチェックアウトを行う場合

コマンド・チェックアウト

TortoiseSVN・チェックアウト

2.ソースコードの作成・編集

他人の作業を気にする事なく、チェックアウトしたコードの作成・編集を行います。 TortoiseSVNは、修正したファイルを判別してチェックマークを入れてくれます。

- コマンドで修正差分チェックを行う場合

$ svn status

- TortoiseSVNで修正差分

修正ファイル

3.修正した内容をリポジトリにコミット

ソースの修正が終了したら、自分の修正分をリポジトリに反映させます。これをコミットと呼びます。

コミットはアップロードの概念とはちょっと違い、修正差分だけが反映されます。つまり、他人と同じファイルを修正しても、修正した部分だけがリポジトリに反映されます。万が一他人と同じ部分を修正しても、どちらを反映させるか選択する事が可能です。この作業の衝突の事をコンフリクトと呼びます。

- コマンドでコミットを行う場合

$ svn commit file_name.php

- TortoiseSVNでコミットを行う場合

コミット

4.アップデート

複数人でリポジトリにコミットしたデータをローカルに反映させ、手元のソースを最新の状態にします。これをアップデートと呼びます。

同じソースを多人数で編集していると、このタイミングでコンフリクトが起こることがあります。

無駄なコンフリクトを防ぐためにも、常に手元のソースコードを最新のものにするために、作業を開始する際には必ずアップデートをする癖をつけておきましょう。

また、開発者がローカルにソースを反映させる時以外に、本番サーバーなどに反映させるときもアップデートを用います。

- コマンドでアップデートを行う場合

$ svn update

- TortoiseSVNでアップデートを行う場合

アップデート

このようにSubversionは覚えなくてはならない事はそう多くありません。また、Web上にはマニュアルが豊富に存在します。

上記の手順でデザイナー、プログラマ共に1つのリポジトリにコミットしながら開発を行う事で、大きく人的摩擦を大きく軽減する事が可能です。

バックナンバーについて

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

Tipsꗗy[W 

Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

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