ITで遊ぶ

PHPの変数表示(ショートタグを利用したViewテンプレート)

(2025/1/18に加筆訂正)

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にしたのは賢明だと思う。
あいかわらず日本の開発者は上に書いた「XMLと間違うからぁ」などということを信じている。

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

よく考えない人たちは、こういうバランス感覚が悪い。
php.iniをよく見よう。

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

function publish($template, $params){
   extract($params);
   ob_start();
   include('./template/header');
   include($template);
   include('./template/footer');
   $html = ob_get_clean();
   echo $html;
}

$templateにショートタグを含んだHTMLを渡す。
$paramsにはよくあるように、HTML内で使われている変数名をキーとした連想配列を渡す。
そうすると、変数を埋めて完成したHTMLを戻してくれるから、こうやって呼び出せばいい。

publish('login.html', $data);

楽チン。

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

いろいろPHPでウェブシステム書いてみたけれどもMVCモデルってどうなの?と思い始めた。
ウェブアプリに触れていない人にかいつまんでMVCモデルを説明すると、Mはモデル。データベースからのデータの引き出し方をいう。Vはビュー。HTMLのテンプレートなどのことをいう。Cはコントローラー。RESTなどでGETなどで受けた時の処理をいう。

しかし、ユーザーが見るのはビューであり、ウェブアプリもひとつの画面に直接関係ない内容が憑依されることは多い。たとえば、ニュースと株価などを同時に表示するなんて画面を考えてほしい。アプリケーションとしてはニュースを集約するためにコントローラーがひとつ、株価表示のためにコントローラーがひとつ、と設計するのが普通だろう。
しかしMVCフレームワークではこれがとっても書きづらい。だからMultiMVCモデルなどという苦しいことを言い出す。暗黙のうちにWeb APIなどが流行り始めているのは実はホンネではみんなMVCに縛られるのが面倒だからではないのだろうか?

本当はビューこそメインで、ビューに応じてプログラム書きたいのではないだろうか。この時、コントローラーって画面制御の具体的な動きを記述する、という感じになる。

2025年現在、世の中はPythonが全盛である。ちょっと前はNode.jsであり、PHPは廃れつつある。たしかに言語仕様がトリッキーで分かりづらい。でもPHPってとっつきはいいし、Webアプリを書くツールだと割り切ればまだまだいいのではないかと思ってる。Pythonでウェブアプリ書いたってロリポップのレンタルサーバーで動かすの大変だし。

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

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

ってこと。

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

PHPが未来永劫続かないということはわかっている。

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

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

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

IBMの職場でも、IMSとDBRC覚えたら一生安泰だと、車とナンパにいそしんでいた人たちは職場を異動できず、一生同じ部署に飼い殺し状態となってしまっていた。私がさんざんそれじゃダメだと言っていたのに遊びに出かけてたから当然の結果だ。

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

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

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

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

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

他人に偉くみられたいからとひとつの技術に固執しないことだ。

ましてやAIにプログラムを書かせる時代だ。多くを知ってコンポーザーになれる人こそ求められると思う。

 

関連記事

  1. WindowsのTEMPは大事

  2. スカパー!光をポータブルデバイスで見る

  3. 将棋と人工知能と人間

  4. SEO業者の被害者多数

  5. 同じパスワードを使い回ししなくても。。。

  6. なんでもスマホへ

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

  8. インベーダーゲーム