質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2777閲覧

PHPバージョン差異による定数の挙動について

Tom_S

総合スコア18

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/11/27 07:34

編集2017/11/27 08:50

サービスA php 5.5.16
サービスB php 7.0
の2つのサービスがあり、MVCで構成されています。
フロントの描画はSmartyを使用しています。

サービスA、サービスBで
Controllerのaction.phpで下記のようなコードがあります。

php

1public function foo(){ 2 (省略) 3 return array( 4 'count' => hoge_COUNT 5}

戻り値'count'はSmartyのテンプレートファイル側で使われます。

ここで問題なのですが、hoge_COUNT(定数)の
正しくはHOGE_COUNTで定義されており、
これが原因で、サービスBは処理が途中で止まってしまいます。
一方、サービスAは戻り値の定数が間違っているにも関わらず、正常に実行されます。

これはPHPのバージョンによる挙動の違いなのでしょうか?

追記
定数の定義はinc.conf.phpにまとめて定義されています。

php

1... 2(省略) 3define( 'HOGE_COUNT' , 5 ); 4...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/27 07:57

少し情報少ないと思います。定数を定義している部分を見せていただけないでしょうか?
guest

回答2

0

PHP-5.3.0からPHP-7.2.0RC6までの全バージョンの挙動を調べてみましたが、suyamaさんが書かれているとおり、未定義のconstは文字列リテラルとして扱われ、PHP-7.1までは Noticeレベル、PHP-7.2はWarningレベルのエラーとなります。いずれも処理は継続されます。
なので、処理結果がPHPのバージョンにより異なるというのは、別の理由によるものではないでしょうか。たとえば、php.iniの内容は両者でそろっていますか?

投稿2017/11/27 09:05

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

正常に実行されますの状況が不明ですが、未定義の変数がある場合、PHPはそれを文字列として解釈します。
PHP5.6とPHP7.0で試してみましたが、どちらも動作は同じようでした。
仕様の確認までしていませんが、7.1は変わっているのかもしれません。

text

1$ php -v 2PHP 5.6.31-6+ubuntu16.04.1+deb.sury.org+1 (cli) 3Copyright (c) 1997-2016 The PHP Group 4Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies 5 with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies 6 with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans 7$ php 8<?php 9const hoge = 'FUGA'; 10 11var_dump(hoge); 12var_dump(HOGE); 13string(4) "FUGA" 14PHP Notice: Use of undefined constant HOGE - assumed 'HOGE' in - on line 5 15 16Notice: Use of undefined constant HOGE - assumed 'HOGE' in - on line 5 17string(4) "HOGE"

text

1$ php -v 2PHP 7.0.18-0ubuntu0.17.04.1 (cli) (built: Apr 26 2017 23:59:48) ( NTS ) 3Copyright (c) 1997-2017 The PHP Group 4Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies 5 with Zend OPcache v7.0.18-0ubuntu0.17.04.1, Copyright (c) 1999-2017, by Zend Technologies 6$ php 7<?php 8const hoge = 'FUGA'; 9 10var_dump(hoge); 11var_dump(HOGE); 12string(4) "FUGA" 13PHP Notice: Use of undefined constant HOGE - assumed 'HOGE' in - on line 5 14string(4) "HOGE"

追記:

すぐにPHP5.5が試せる環境が手元にありませんでしたが、PHP5.4で試しても同じ挙動だったので、5.5だけ異なるということはないかと思います。
動作の違いは、定数の処理方法によるものではないものと推測します。

text

1$ php -v 2PHP 5.4.16 (cli) (built: Nov 15 2017 16:33:54) 3Copyright (c) 1997-2013 The PHP Group 4Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies 5$ php 6<?php 7const hoge = 'FUGA'; 8 9var_dump(hoge); 10var_dump(HOGE); 11string(4) "FUGA" 12PHP Notice: Use of undefined constant HOGE - assumed 'HOGE' in - on line 5 13string(4) "HOGE"

投稿2017/11/27 08:38

編集2017/11/27 09:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問