ITで遊ぶ

PHPの変数表示(ショートタグのどこが悪い?)

PHPはもともとHTMLと混在する書き方が想定されてきた。こんな感じ

<?php
$title = "hello";
?>
<!DOCTYPE html>
<body>
<h1><?php echo $title ?></h1>
<p>hogehoge</p>
</body>
</html>

で、この赤文字のところが問題だ。
なぜならば、PHPプログラムで出力しようという変数をHTML内に書こうとすると、狂ったようにこのphp echoを書かねばならない。
PHP言語自身はそのためこういう書き方も許している。

<?=$title ?>

多くのPHPの紹介文が、「この書き方はやめたほうがいいのだ」と書いている。
なぜ、「使うべきでない」といわれているかというと、XMLでの<?xml とPHPの処理系が間違うからだという。

これってアホな議論で、実用上ありえないと私は思う。
だって、XMLファイルなのにsuffixを.phpにすることがある、っていう想定ですよ?
そういう人って.exeを.iniに書き換えたりするのかね?

そしてPHP 5.4くらいからはデフォルトでONなんである。
PHPの開発者達がデフォルトをONにしたのは賢明だと思う。

ショートタグを活用すれば狂ったようにecho,echoと書かずにすみ高い生産性をだせる。
ほとんど設計設定ミスに近いxmlとショートタグの混在の可能性とどちらを重視するかの問題だ。

よく考えない人たちは、こういうバランス感覚が悪い。
混在せざるを得ない、マイナーな環境にいる人こそショートタグ機能をオフにするべきだ。

とはいえ、先の例のようにひとつのPHPプログラム内にHTMLを書くことはあまりいいことじゃない。 そこでこういう関数を作っておく。

function render($template, $params){
   extract($params);
   ob_start();
   include($template);
   $ret = ob_get_contents();
   ob_end_clean();
   return $ret;
}

$templateにショートタグを含んだHTMLを渡す。
$paramsにはよくあるように、HTML内で使われている変数名をキーとした連想配列を渡す。
そうすると、変数を埋めて完成したHTMLを戻してくれるから、echoを一回だけ書けばいい。こんな感じ。

echo render('index.html', $data);

楽チン。

自分ひとりで作るシステムの場合、Smartyみたいなデカイライブラリーを用意して、面倒くさいルールを覚えて、Smartyの書き方に悩んでいるのを押し隠して、無理やり「ラクだ」と思い込むことはやりたくない。

最大の理由が、「習得のための労力」を惜しむから。

私はIBMでは珍しいプロのプログラマーでもあった。
(社内でOSのテストプログラム書いたり、SIでコードを書いて売ってたからね。)
1980年代にFORTRANから始まり、本当にいろんなプログラミング言語でプログラムを書いてきた。 その結果、いえることは

「プログラミング言語って単なる道具」

ってこと。

大量に書いた覚えのあるMVS(Z/OS)のアセンブラーとか、VMでいっぱい書いたREXXとか、ActiveX使いまくりのDelphiとか、そこそこ書いたVisual Basicとか、今はもう使わない。
Javaも一部では支持者は多いが、ウェブアプリケーションのシェアでは圧倒的にPHPが多い。

だからといって、PHPが未来永劫続かないということは歴史上わかっている。

フレームワークだ、エクステンションだ、に夢中になるのもいいのだが、言語自身にすら栄枯盛衰がある。

あまり賢くないエンジニアに限って労力を惜しむから習得した技術を捨てられなくなる。

この技術を捨てられない罠に落ち込んだ若手技術者は多い。

IBMの職場でも、IMSとDBRC覚えたら一生安泰だと、車とナンパにいそしんでいた人たちは職場を異動できなくなった。

某ベンチャーでは、Lotus Notesで一生飯が食えると自信満々に思いこんで同僚の女のナンパしかしてない茶髪の兄ちゃんがいた。今ごろなにしてんだろ?たぶんITの分野にはいないだろう。

JavaのStrutsをプログラミング技術の最高峰のように唱えていたCSKのおじさんはどこに行ったのだろうか。

世の中はオープン系になり、インターネットになり、クラウドになったのに最新技術とほとんどかかわりを持てない技術者になった理由は勉強しなかったからである。

技術は必要ならガツンと勉強する。
より早く習得したいなら、英語は必須。
かねてから繰り返すように、ほぼすべての技術は英語圏からくるのだから。

習得に時間がかかるものは、自分にとって本当に必要なのか、よく考えたほうがいい。
PHP覚えてめんどくさいフレームワークをいくつも調子にのって覚えていると、
その山から降りられなくなる。

先ほど書いたように自作render関数ですむところに、Smartyをもってきていないか。
次の技術の習得をためらう時は、プロのエンジニアとしては廃業する時だろう。

エンジニアのマネージャになったからといって、現場のスキルの足りない「なんちゃってエンジニア」のいうことを鵜呑みにするのか、自分で「なんちゃってエンジニア」の言い分を評価できるのかで仕事の仕方は大きく変わることはいうまでもない。

 

関連記事

  1. マイクロソフトに見る[イノベーションのジレンマ]

  2. WindowsXPサポート切れで恐怖心を煽るなよな

  3. 再びAI

  4. iPhoneで会議を録音

  5. 再び無線LAN構成変更と子機

  6. Bluetoothを繋ぐと自動的にiTunesがスタートする件について…

  7. 消え行くSNS(Mixi,GREE)

  8. トラックボールって