php

論理演算子を使って複数条件を設定する

前回、前々回の記事で条件を指定した条件判断文を
書いてきました。もっと複雑な条件を今回書いていきます。

在庫が0で、かつすぐに入荷するなら
「売り切れ、近日入荷予定!」と表示する

この条件にあたる部分は、以前の記事よりも、複雑な場合を表しています。
このように条件をより複雑にしたいときに使うのが論理演算子という
演算子を使います。この論理演算子は、

条件をさらに評価して、trueまたは、falseの値を得る

という機能を持っています。
たとえば、&&演算子は上の条件で考えると
 ( 在庫が0 ) && ( 近日入荷予定 )

&&演算子は、左辺と右辺がともにtrueであるなら、
全体の値もtrueとする演算子です。この場合なら、
「在庫が0」かつ「近日入荷予定」なら、この条件はtrueになります。
どちらかの条件が不成立の場合は、全体の条件はfalseとなり、
条件が設立しません。

演算子 trueとなるの条件 評価
&&
and
左辺・右辺がともにtrueのとき 全体
false false false
false true false
true false false
true true true
||
or
左辺・右辺のどちらかがtrueのとき 全体
false false false
false true true
true false true
true true true
xor 左辺・右辺の真偽が異なるとき 全体
false false false
false true true
true false true
true true false
! 右辺がともにfalseのとき   全体
false true
true false

下記の条件はfalse

 5>3 && 3==4

$aの値が10又は、$aの値が20以上ならtrue

 $a == 10 || $a >= 20

下記の条件は$aの値が10以外のときはtrue

 !( $a == 10 )

!演算子は、オペランドを1つに対して使います。
オペランドがfalseのときtrueとなります。
上記の例では、変数$aが10でないならtrueとなります。

論理演算子を組み合わせて複雑な条件を作ることができる。

ビット単位の論理演算子

PHPには2進数で数値を表した場合の桁(ビット)どうしの
演算を行う、ビット単位の論理演算子とは

2進数で表した1つまたは2つの数値のそれぞれの桁に
ついて0か1を返します。

例えば、ビット論理演算子の「&」は、2つの数値の桁が
どちらも1だった場合は1、それ以外なら0とする演算を行います。

10進数の7を2進数にすると:00000111
10進数の9を2進数にすると:00001001

  10進数の7   00000111
  10進数の9   00001001
  10進数の1   00000001

「7 & 9 」を行うと1となります。
上記のお2つの数値の一番右の桁「1 & 1」なら1と評価します。
他の桁は「1 & 0」又は「0 & 1」は0と評価されます。

ビット単位の論理演算子

演算子 各ビットが1となる場合
& 2数のどちらのビットも1
| 2数のどちらかのビットが1
^ 2数のビットの値が異なる
~ ビットが0の場合(単項演算子)

*ビットとは、コンピューターのデータの
 最小単位で、0か1かを表します。

サンプルコードの実行結果はこちら

条件演算子を使ってみる

複雑な条件判断を行う方法を書いてきましたが、
簡素な条件判断の場合はif文を使わなくても、
条件演算子(conditional operator)の「?:」を使い、
書くことができます。上記のサンプルコードの30行目以降をご覧ください。

条件演算子は、3つのオペランドをとる3項演算子です。
全体の式の値は、trueのときは式1の値、falseのときは式2の値です。

条件 ? trueのときの式1:falseのときの式2;

if文よりも簡素になっています。

条件演算子を使い。簡単な条件に応じた処理を書くことができる。

変数調査

PHPでは、変数が存在するか否かによって処理を変える場合があります。
例を挙げると、変数$numが存在する場合は、何か処理をしたい場合とかです。

そのときは、isset($変数名)という指定を使うことができます。
これは値が空(NULL)ではないならtrueと評価されます。
isset以外にも下記のようなものがあります。

指定 説明
isset($変数名) 変数が存在してNULLではないならtrue
empty($変数名) 変数が0や空であるならtrue
is_string($変数名) 変数が文字列ならtrue
is_numeric($変数名) 変数が数値ならtrue

-php
-, , ,