memo

ちょっとしたメモ書き(個別表示)

PHPの怪 : (2009/09/25)
PHPは時として驚きを与えてくれる。
マンネリ化した開発に新鮮味が欲しければPHPの使用を検討してみるといい。

<?php
$a = array(1,2,3);
?>
<? foreach($a as $v){ ?>
<?= $v ?>
<? } ?>

なんの変哲も無いPHPのコードだが、上記コードは
4.3.10と4.3.11で挙動が異なるようだ。
前者では「123」と表示されるのだが、後者では
「ArrayArrayArray」と表示される。
「Array」とは配列を出力しようとした際の文字列表現である。
「<?= $v ?>」の部分を「<?= $v[0] ?>」へ変更すると、
4.3.11でも「123」と表示されるようである。

手元にあったPHP5系での挙動は前者のものなので(ちなみに5.2.1)仕様変更というよりは「4.3.10 => 4.3.11」の過程でエンバグしたのだろうか。
しかし、これだけコアな部分の挙動が変わってしまうのだから
大問題になりそうなものだが、この件に触れた記事を検索しても見つけられなかった。
きっとPHPユーザー達は真面目で実直なのでforeachなんて即物的な物は使わずにforで配列の走査をしているのだろう。
まことに感心である。

: back