WordPressのテンプレートなどで環境定数があれば、何かを出力したいとかの時。
isset() を使うとエラーになる
<?php if( issset(IS_PRODUCTION) && IS_PRODUCTION === true ) : ?> // GoogleAnalytics のスクリプトを表示 <?php endif; ?>
↓
PHP Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in ~
isset()
は変数のみを受け付けるらしい。
なので、定数IS_PRODUCTION
が定義されていてもエラーになる。
定数だと判りきっている場合は、defined() を使うのが確実
<?php if( defined("IS_PRODUCTION") ) :?> // GoogleAnalytics のスクリプトを表示 <?php endif; ?>
defined()
を使う際に少し注意が必要です。
bool defined ( string $name )
defined() は 定数にしか適用できません。
PHP: defined - Manual
引数を文字列で渡してあげないと定数が定義されれいても常にfalse
になってしまい上手く動作しません。
<?php define('TEST', 'foo'); var_dump( defined(TEST) ); // => 常に false
PHP5.4以降なら empty() が使える
<?php if( !empty(IS_PRODUCTION) && IS_PRODUCTION === true ) : ?> // GoogleAnalytics のスクリプトを表示 <?php endif; ?>
define('IS_PRODUCTION', true);
とかで定数IS_PRODUCTION
が定義されていなくても大丈夫。
但し、empty()
は定数が定義されているかをチェックしているわけでないので、
IS_PRODUCTION
が定義されていない時と、IS_PRODUCTION
がnullの時同じ挙動になるので、厳密に定義されているかを調べるのには使えない。
定数だと判りきっている場合は、defined()
を使うのが確実そうです。
厳密に定数が定義されているかを調べたいのではなく、分岐などで定数の定義漏れでのエラーに対する保険と言うことであれば、empty()
も使えると言えば使えそうです。(※ 但し、PHP5.4以降)
[参考]
- 作者: 相原知栄子,大曲仁,プライム・ストラテジー株式会社
- 出版社/メーカー: 翔泳社
- 発売日: 2016/04/09
- メディア: 大型本
- この商品を含むブログ (1件) を見る