文中の説明画像をクリックすると拡大します。
演算子って何?
演算子(えんざんし)とは、コンピュータで計算するときに使われる、足し算や掛け算などの記号のことをいいます。特に足し算や掛け算は「算術演算子」に分類されます。
例えば、「1 + 1 = 2」という数式の「+」は算術演算子の中でも加算演算子と呼ばれ、1と1を足し合わせるということを意味しています。
足し算や掛け算だけでなく、引き算や割り算も算術演算子に分類されます。このような算術演算子は日常生活においてもよく使われているため、比較的理解しやすいかもしれません。
さらに、演算子には他にも「比較演算子」「ビット演算子」「代入演算子」「論理演算子」などがあります。一般的に演算子はプログラミング言語に標準で用意されている機能です。WordPressが動作しているPHPでも同じです。
今回、詳しく紹介する演算子は論理演算子です。論理演算子は、WordPressでのWebサイト制作にも知っておくべき知識です。論理演算子を使いこなすことで、複雑な条件を想定した処理を行うことができます。
論理型って何?
論理演算子を学ぶ前に、論理型の変数について解説します。
論理型とは、値として「真」か「偽」を持つ変数の種類のことをいいます。
別の言い方で表現すると、「真」は「true」であり、「偽」は「false」ということになります。この「true」や「false」のことを論理値と言います。
論理型について理解するために、ここで少し例え話をしましょう。
先ほど紹介した演算子を使って計算すると、計算の結果として、何らかのデータが生まれます。例えば、「1+1」には、計算の結果として「2」というデータ(数値)が生まれます。
PHPにおける計算は、数値だけではありません。文字列についても足し合わせることができます。例えば「Hello」と「World」を足し合わせて「HelloWorld」という新しい文字列を生み出すことができます。
演算子にはたくさんの種類があり、その全てを説明することをここではしません。ここで重要なことは、演算子を使って計算をすると、新しい値が生まれるということです。
話を論理型に戻します。論理型の変数には「真」と「偽」があり、この論理型においても、演算を行う事で新しい論理型の値を作り出すことができるのです。
この「真」と「偽」の2つの論理型の変数に対する演算方法が、論理演算子ということになります。
論理演算子の種類
PHPに用意されている論理演算子の種類は以下の6つです。ここで、$a、$bはともに論理値を持つ変数とします。
【論理積】
$a and $b あるいは $a && $b $aおよび$bがともに「真」の時に「真」になる
【論理和】
$a or $b あるいは $a || $b $aおよび$bのどちらかが「真」の時に「真」になる
【排他的論理和】
$a xor $b $a または $b のどちらかが「真」でかつ両方とも 「真」 でない時に「真」になる
【否定】
!$a $aが「真」でない時に「真」になる
論理積と論理和には、演算子が2種類あることに注意してください(例えば、「and」と「&&」の2種類。例えば、「or」と「||」の2種類)。
これは演算子としては同じ機能ですが、他の複数の演算子と計算する際の優先度が違ってきます。優先度については後ほど説明します。
論理演算子について文字で説明しても理解しづらいので、図にしました。
この図の中にある、$a や $b は「真」の値を持つ変数だとお考えください。そして、図の中でオレンジの色が付いている部分が、それぞれの論理演算子で計算した結果、「真」となる部分を表しています。
演算子の優先順位
「5 + 3 × 3」のような計算をする時に、足し算の前にまず掛け算から行うといったルールを小学校で学んだと思います。今回の例では、正しい計算と間違った計算は以下のようになります。
【正しい計算】
5 + 3 × 3 = 5 + 9 = 14
【間違った計算】
5 + 3 × 3 = 8 × 3 = 24
このような、演算子の優先順位が論理演算子にも存在します。ここで2つの論理和演算子「||」と「or」について見てみましょう。例えばこのようなPHPのプログラムを書いたとします。
【PHP】
<?php $x = false || true; // $xはtrueになる ?>
これは「falseとtrueの論理和演算」ということになり、$xにはtrueが代入されます。これはわかりやすいと思います。しかし、ここで論理和演算子として「or」を使用すると少し事情が変わってきます。
【PHP】
<?php $y = false or true; // $yはfalseになる ?>
この数式では、まず「$y = false」が先に評価されます。そして次に、「$y = false」 と「true」の論理和演算が行われます。
つまり、「or」より前に、「$y = false」が先に計算されてしまうのです。
よって、この計算によって、$yはfalseになってしまいます。
演算子の優先順位として、「||」は「=」よりも優先度が高く、「or」は「=」よりも優先度が低い、ということがわかります。
このような事情があり、論理和を使う場合には、優先度の高い「||」演算子を使うことが多いです。演算子を使う時には優先度についても考慮しておかないと、期待通りの結果にならないことがあるので注意が必要です。
なおPHPマニュアルサイトに演算子の優先順位をまとめた表が公開されているので紹介します。
【参考】演算子の優先順位
WordPressにおいて論理演算子を使うケース
WordPressのテーマ開発の場面で、論理演算子を使うケースはたびたびあります。
論理演算子は、結果として論理型の変数である「真(true)」か「偽(false)」を返すため、条件分岐であるif文と共に使われることが多いです。
例えば、「投稿ページと固定ページのいずれかだったら処理を行う」というプログラムをPHPで実装すると、論理和演算子を使って、このようになります。
【PHP】
<?php if ( is_single() || is_page() ) { // ここに処理を書く }
または、「トップページ以外のページだったら処理を行う」というプログラムは以下のようになります。
【PHP】
<?php if ( !is_home() ) { // ここに処理を書く } ?>
この例では否定演算子を使用しました。
このように、1つのテンプレートファイルで、条件を変更しながら複数のページに対応させる方法として、論理演算子が使われることが多いです。
まとめ
- 論理演算子は、論理型を持つ変数に対して計算をするための演算子。
- 演算子には、優先順位がある。
- WordPressにおいて、論理演算子は条件分岐と共に使われる事が多い。