読者です 読者をやめる 読者になる 読者になる

かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP 定数の有無を確認したい。

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が定義されていてもエラーになる。

PHP5.4以降なら empty() が使える

<?php if( !empty(IS_PRODUCTION) && IS_PRODUCTION === true ) : ?>
// GoogleAnalytics のスクリプトを表示 
<?php endif; ?>

define('IS_PRODUCTION', true); とかで定数IS_PRODUCTIONが定義されていなくても大丈夫。
但し、empty()は定数が定義されているかをチェックしているわけでないので、
IS_PRODUCTIONが定義されていない時と、IS_PRODUCTIONnullの時同じ挙動になるので、厳密に定義されているかを調べるのには使えない。

 

厳密に定数が定義されているかを調べたいのではなく、分岐などで定数の定義漏れでのエラーに対する保険と言うことであれば、empty()で事足りそうだと思いました。
※ 但し、PHP5.4以降


[参考]

一歩先にいくWordPressのカスタマイズがわかる本

一歩先にいくWordPressのカスタマイズがわかる本