PHPのビックリマーク「!」の意味は?
WordPressのテンプレートなどPHPのコードを見ているとビックリマーク(!)を見かけます。かなり多く見かけるので気になるかもしれませんが、このビックリマークの意味は何でしょうか?意外と重要なのでこの記事で説明していきます。
PHPのビックリマークの意味は「否定」
ビックリマークの意味は「否定」ですが簡単に言えば「~ではない」という意味です。わかりやすいように実際のコードで説明します。テーマのheader.phpで次のようなコードを見かけることがあります。
<?php if ( !is_front_page() …略… ) { ?> <?php get_template_part('module_pageTit'); ?> <?php get_template_part('module_panList'); ?> <?php } ?>
ifとis_front_pageを組み合わせると「もしもトップページだったら」という条件になりますが、否定の「!」を付けることで「もしもトップページ以外だったら」(トップページでない場合は)という条件になります。
その仕組みを説明していきます。
このコードではパンくずリストを表示(3行目)していますが、パンくずリストはトップページ以外のページに表示するのが一般的です。そこで、「トップページ以外に表示する」という条件が必要になるのですが、その条件が1行目のビックリマークで表現されています。
ご存じかもしれませんがis_front_page関数は、このページがトップページかどうかをチェックする関数です。
ですが、単純にis_front_page関数を使って次のようなコードを組み立てると「このページがトップページだったらパンくずリストを表示する」というおかしな意味になってしまいます。
<?php if ( is_front_page() ) { ?> <?php get_template_part('module_panList'); ?> <?php } ?>
そこで、「トップページに」という条件を反転して「トップページ以外は」にするため、魔法の記号「!」を使います。といっても難しい話ではなく、「is_front_page」を「!is_front_page」に書き換えるだけです。
<?php if ( !is_front_page() ) { ?> <?php get_template_part('module_panList'); ?> <?php } ?>
「is_front_page()」を「!is_front_page()」にしただけですが、これで「トップページだったら」の条件が反転して「トップページ以外は」になります。
これにより、トップページ以外にパンくずリストが表示される仕組みです。
条件を反転するというビックリマークの機能について簡単に説明しましたが、もう少し詳しく知りたい方のためにPHPのビックリマークについて掘り下げます。
PHPのif文の仕組み
そもそも、なぜ「if (is_front_page())」が「トップページだったら」になるのでしょうか。
ifは直訳すると「もしも~だったら」ですが、PHPでは条件分岐の構文(if文)として使われます。条件分岐とは条件に応じて行き先が分岐するという意味です。
たとえば、
もしも60点以上だったら合格
それ以外だったら不合格
のようなイメージです。
得点に応じて判定が2つに分岐します。
is_front_pageの例に置き換えると、
もしも現在のページがトップページだったらパンくずリストは表示しない
それ以外はパンくずリストを表示する
となります。
この要件をコードに置き換えるわけですが、if文で組み立てる分岐は必ず二択になります。
つまり、
「現在のページはトップページですか?」という二択の質問の答えが
「はい」の場合はパンくずリストを表示しない
「いいえ」の場合はパンくずリストを表示する
という分岐になります。
これをプログラムに翻訳してみます。それぞれの言葉は次のように置き換えることができます。
- 【質問】トップページかどうか:is_front_page関数を使う
- 【答え】「はい」はtrue・「いいえ」はfalseを使う
- 【質問と答えを組み立てる構文】if文を使う
- 【行うこと】パンくずリストの表示:get_template_part関数を使う
これらのキーワードをプログラムに組み立てます。
まずは、空の状態のif文(もしも~だったら)を準備します。
<?php if () { ?> <?php } ?>
次に「トップページですか?」が「いいえ」だったら、の条件を差し込みます。
<?php if (is_front_page() == false) { ?> <?php } ?>
最後に、条件を満たすときのコード(パンくずリストを表示)を追加します。
<?php if (is_front_page() == false) { ?> <?php get_template_part('module_panList'); ?> <?php } ?>
条件にビックリマークを使う書き方と違って「== false」のようなコードが出てきて難しく思えるかもしれませんが、実はPHP入門という意味では、この書き方が基本です。
if文は省略できる
WordPressテンプレートで「~以外は」という条件を組み立てるのに「== false」の代わりにビックリマークが使われているのは、if文の省略形だからです。
「is_front_page() == false」の「== false」や「== true」は省略できます。
まずは、「== true」を使ったif文で説明します。条件は「現在のページがトップページだったら」になります。
<?php if (is_front_page() == true) { ?> <?php get_template_part('module_panList'); ?> <?php } ?>
この「== true」は単純に削除することができます。つまり、次のように記述しても同じ意味です。
<?php if (is_front_page()) { ?> <?php get_template_part('module_panList'); ?> <?php } ?>
内容は変わりなく「現在のページがトップページだったら」です。
次は「== false」を使って「トップページ以外は」のコードを組み立ててみます。
<?php if (is_front_page() == false) { ?> <?php get_template_part('module_panList'); ?> <?php } ?>
このコードからも「== false」を省略することができます。その代わりに否定を示す「!」を付けるということです。
<?php if (!is_front_page()) { ?> <?php get_template_part('module_panList'); ?> <?php } ?>
このように「!」は「~ではない」という条件を作る「== false」の省略形だということです。これは特殊な書き方ではなく、多くのテーマやプラグインでビックリマークを使った書き方になっているはずです。
なぜWordPressテンプレートには省略形のコードが多いのか。それは「プログラムは短い方が良い」という原則によります。テンプレートは学習用の教材ではなく実践的なプログラムだとも言えるでしょう。わかりづらいかもしれませんが、少しずつ慣れるようにしましょう。
まとめ
WordPressのテンプレートでよく見かけるビックリマークの意味はおわかりいただけたでしょうか。単純に「~ではない」(否定)の意味だという理解でも構いませんがif文から「== false」が省略された形だとわかれば、コードの解釈にも役立つと思います。プログラミング未経験の方には難しい話だったかもしれませんが参考にしてください。