PHPでifdefを設定する方法(defined isset function_exists)

投稿者: | 2009年12月23日

PHPにはC言語でいうifdefプリプロセッサ命令は存在していない。

しかし、スイッチ一つでデバッグ用・リリース用などを切り替えて使いたいという要望はあるはずだ。

そんなとき、PHPではどうするのか?

PHPでCのifdefのようなことをやるには、defined()という関数を使う。

これは定数にしか使えない。

定数がDefined、つまり定義されているかどうかを判定する関数だ。

※定数のときはdefined、変数の値が設定されているかでスイッチしたいときはisset()、関数が存在しているかに対してはfunction_exists()を使う。

definedの引数は定数名を表す文字列なので、クォーテーションが必要だ。(クォーテーションがないと定数名ではなく定数自体を引数としてしまうため)

defined()関数は、文字列で与えられた名前の定数が定義されているか?を判定する。

PHP defined:定数が定義されているかを判定

// CONST_NAMEという定数が定義されていたらブロック内が実行される
if (defined('CONST_NAME'))
{
echo CONST_NAME;
}

PHP isset:変数に値がセットされているかを判定

// これは TRUE と評価されるので、テキストが出力される
if (isset($var)) {
echo "This var is set so I will print.";
}

PHP function_exists: 関数の定義が存在しているかを判定

// imap_open関数が存在しているかどうかで処理を分岐
if (function_exists('imap_open')) {
echo "IMAP 関数が利用可能です。
\n";
} else {
echo "IMAP 関数は利用できません。
\n";
}

WordPressの子テーマでテンプレートを編集するときにもfunction_existsが便利!

WordPressは直接phpファイルをいじって簡単にカスタマイズ出来るのが、MovableTypeに対するアドバンテージのひとつです。

ですが、wp-content/themesの中にあるファイルを直接編集してしまうと、テーマのアップデートが来たときに、カスタマイズが全部上書きされてしまいます。

それを避けるための機能がchild-theme、子テーマというやつです。

if (!function_exists('theme_special_nav')) {
function theme_special_nav() {
// Do something.
}
}

WordPressの子テーマについて詳しくは下記リンクで
http://codex.wordpress.org/Child_Themes