namespace と utf-8 の微妙な関係
php5.3になって 名前空間が利用できるようになったのですが、
namespace キーワードの前には declare 文以外を置いてはいけない
という決まりがあります。
( http://www.php.net/manual/ja/language.namespaces.definition.php )
ところが、namespace の前には <?php
しか置いてないはずなのに、
Fatal error: Namespace declaration statement has to be the very first statement in the script
となって実行できないケースに遭遇しました。
原因は BOM でした。
utf-8 には BOM と呼ばれる unicode であることを示す(かつエンディアンを表す)値が付くことがあります。
これ、通常のエディタでは表示されないので付いているのかどうか見た目にわかりません。
また、phpはこれを無視してくれないため<?php
の前にデータがあると見なされ、エラーとなったようです。
(php5.3/5.3.1 で確認)