質問: サービスA php 5.5.16 サービスB php 7.0 の2つのサービスがあり、MVCで構成されています。 フロントの描画はSmartyを使用しています。 サービスA、サービスBで Controllerのaction.phpで下記のようなコードがあります。 ``` public function foo(){ (省略) return array( 'count' => hoge_COUNT } ``` 戻り値'count'はSmartyのテンプレートファイル側で使われます。 ここで問題なのですが、hoge_COUNT(定数)の 正しくはHOGE_COUNTで定義されており、 これが原因で、サービスBは処理が途中で止まってしまいます。 一方、サービスAは戻り値の定数が間違っているにも関わらず、正常に実行されます。 これはPHPのバージョンによる挙動の違いなのでしょうか? 追記 定数の定義はinc.conf.phpにまとめて定義されています。 ``` ... (省略) define( 'HOGE_COUNT' , 5 ); ... ```
回答: PHP-5.3.0からPHP-7.2.0RC6までの全バージョンの挙動を調べてみましたが、suyamaさんが書かれているとおり、未定義のconstは文字列リテラルとして扱われ、PHP-7.1までは Noticeレベル、PHP-7.2はWarningレベルのエラーとなります。いずれも処理は継続されます。 なので、処理結果がPHPのバージョンにより異なるというのは、別の理由によるものではないでしょうか。たとえば、php.iniの内容は両者でそろっていますか?