PHPのヒアドキュメント内で関数(htmlspecialchars等)を利用する方法
もう7月です。
今年も半分が終わってしまいました(^ω^;)
たまにはプログラミングっぽい話題を。
PHPで開発をやっていて「これは便利!」と思い、
現在も愛用している方法を紹介してみます。
(改めてググってみてもすぐには見つからなかったので(^ω^;))
PHPで開発を行っている際に
echoで複数行を出力したくなる場合があるかと思います。
(複数行を変数へ代入したい場合も含みます。)
そういった場合、私はヒアドキュメントを用います。
また、以下のようにヒアドキュメント内で
変数を展開できる機能は非常に有用です。
PHPソース:
<?php
$tempstr = ‘2行目’;
echo <<< EOT
1行目<br />
{$tempstr}<br />
3行目
EOT;
?>
出力:
1行目
2行目
3行目
ただし、関数は展開されないため、
htmlspecialchars等を利用したい場合に困ります。
PHPソース:
<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
echo <<< EOT
1行目<br />
{htmlspecialchars($tempstr)}<br />
3行目
EOT;
?>
出力:
1行目
{htmlspecialchars(2行目)}
3行目
これでは、$_GETや$_POSTで受け取ったデータを出力する際に困ってしまいます。
安全に出力するためには以下のように記述します。
PHPソース:
<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
$tempstr = htmlspecialchars($tempstr);
echo <<< EOT
1行目<br />
{$tempstr}<br />
3行目
EOT;
?>
出力:
1行目
<a href=”http://www.google.com/”>2行目</a>
3行目
こうする事で安全に出力できはしますが
正直な所、出力したい変数が多い場合は面倒ですよね。
もっとスマートに記述したい所です。
そこで、htmlspecialcharsをクラス化し変数に代入してみます。
実際には以下のようなコードをPHPソースに追加します。
PHPソース:
<?php
class HSC_Class {
public function enc($output){
return htmlspecialchars($output);
}
}
$hsc = new HSC_Class();
?>
すると、以下のような形で記述できるようになります。
PHPソース:
<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
echo <<< EOT
1行目<br />
{$hsc->enc($tempstr)}<br />
3行目
EOT;
?>
出力:
1行目
<a href=”http://www.google.com/”>2行目</a>
3行目
いかがでしょうか。
事前にhtmlspecialcharsを通す必要がなくなった分、
PHPソースが分かりやすく簡素になったと思いませんか。
「$hsc->enc()」とする事により、
クラス「HSC_Class」内の関数「enc」を呼び出している事になります。
このように、
1. 必要な関数をクラス化
2. 作成したクラスを変数へ代入
3. ヒアドキュメント内で変数から関数を呼び出し
とすることにより、ヒアドキュメント内で関数が利用できます。
よろしければお試しくださいね。
そうそう、PHPの開発にはEclipseがお勧めです。
(メモリに余裕があればAll in Oneパッケージが便利です。)
初期設定が多少面倒ですが、それさえ乗り越えればかなり快適です(^ω^ )
(ちなみに、上記のPHPコード部分の配色はEclipseの物を再現してみました。)
Recent Comments