PHP基本編

論理比較演算

1. htmlとphpファイルの準備

 これまでと同様、サンプル用のhtmlファイルとphpファイルを作成します。[Xamppフォルダ]→[htdocsフォルダ]→[pkpkisoフォルダ]で、ひな形ファイル「hina.html」を[Ctrl]+[c]してコピー。貼り付け[Ctrl]+[v]を2回すると2つ分コピーができますので、それぞれの名前を「kihon04.html」と「kihon04.php」に変更。さらにこれらを編集して、前資料の基本編・変数と条件分岐でやったように、データの入力・送信と、データの受信・出力の処理を、次のように作ります(ここで時間をかけても仕方ないのでコピペでOK)。

  kihon04.html
  

  kihon04.php
  

 一応意味を確認しておきましょう。まずkihon04.htmlでは<form>タグによってkihon04.phpにpostメソッドでデータを送る設定をしています。そしてそのデータ入力部品として2つの<input type="text">と送信ボタン<input type="submit">とリセットボタン<input type="reset">を設置しています。
 一方、kihon04.phpでは、postメソッドで送られてきたデータを$_POSTで受け取り、変数$onamaeと変数$tensuに代入。「こんにちは~さん」「点数は~点です」とecho命令で表示しています。$_POSTのデータ識別名が、送信元のkihon04.htmlのデータ入力部品と一致していることを確かめて下さい。
 作成したらXamppを起動しlocalhost経由で表示します。URLは「http://localhost/phpkiso/kihon04.html」。Xamppを忘れた人は準備編・Xamppの起動Xamppの設定を要確認。問題なければ下のイメージの通り入力欄が表示されるので、適当に入力して「送信」をクリック。するとデータが受け渡されてもう一つ下のイメージのように表示されれば準備OKです。うまくいかない場合はよく見直しましょう。

  

  

2. 論理演算

 ここからが本題。まずは論理演算です。
 前の資料基本編・条件分岐で「if文」による条件分岐を確認しましたが、何らかの処理条件を指定する場合、2つ以上の条件を組み合わせたいことがあります。例えば、ログイン処理では、IDとパスワードの両方が合ってないとダメですし、連絡先の入力であれば、メールアドレスか電話番号か携帯番号のいずれかが入力されていればOK、ということもありえます。このように、「条件1かつ条件2」とか「条件1または条件2または条件3」といった、複数の条件の組み合わせは、「論理演算子」によって実現することができます。サンプルで確認しましょう。上で作成したkihon04.phpを次のように編集しましょう。

  kihon04.php(php部分以外は省略)
  

 解説します。まず最初の3行は上で見たままですので問題なし。次の「if文」についても大丈夫でしょう。「if(条件)」を満たせば、続く「{ }内の処理」を実行し、満たさなければ「else」に続く「{ }内の処理」を実行する、という意味です。さっぱりわからんという人は基本編・条件分岐から見直して下さい。
 さて、この「if(条件)」。よく見ると2つの条件が入っていることが分かると思います。「$onamae==''」つまり「$onamaeが未入力に等しい」という条件と「$tensu==''」つまり「$tensuが未入力に等しい」という条件の2つです。「''」は「文字列ナシ」「未入力」を表すシングルコーテーション「'」2つですので間違えないように。あと「==」も、左辺と右辺が等しいという条件を指定する「イコール2つ」です。
 そしてこれらの2つの条件の間に「and」が指定されています。そしてこれこそ「論理演算子」の一つである論理積。「AでありかつBである」という条件を表します。つまりは、上記サンプル2行目に設定された条件は、「$onamaeが未入力で、なおかつ、$tensuも未入力」という意味になります。簡単に言えば「両方の変数がからっぽ」ということです。
 というわけで動作を確認しましょう。localhost経由で「kihon04.html」にアクセスし、何も入力せずに「送信」をクリック。すると以下の通りメッセージが表示されると思います。

  

 ところで、このサンプルが未入力チェックだとするとこれでは十分ではありません。名前だけ入力されて点数が入ってないとか、点数はあるけど名前がない、という状況も普通ダメでしょう。つまり、どちらか一方が未入力の場合もメッセージを出す必要があります。
 そんな時どうするか?先ほどは「$onamaeが未入力、かつ、$tensuが未入力」ということで論理積「and」を設定しましたが、ここで必要なのは「$onamaeが未入力、または、$tensuが未入力」という条件になります。このような「AまたはB」というときに使うのが論理和「or」です。
 ということで、kihon04.phpを編集し、現状のif(条件)は残しつつ、「or」を使って、$onamaeか$tensuのいずれかが未入力の場合に「入力されていない項目があります」と表示するプログラムを加えることを考えましょう。どうしたら良いでしょうか?いくつかやり方はあると思いますが、ここでは以下のサンプルのようにやってみましょう。

  kihon04.php(php部分以外は省略)
  

 ここで追加したのは、真ん中のあたりにある「else if(条件)」と続く{ }です。ここで設定された条件は「$onamae=='' or $tensu==''」ということで「$onamaeが未入力、または、$tensuが未入力」という意味になります。
 修正が済んだらlocalhost経由でkihon04.htmlにアクセスし「お名前」か「点数」のどちらかを入力し他方を空欄にして「送信」してみて下さい。以下のイメージのように表示されればOKです。

  


SPONSORED LINK


3. 論理演算子と組み合わせ

 論理演算について雰囲気つかめましたか?ここでは最もよく使う論理積「and」と論理和「or」を確認しましたが、実は他にもいくつかの論理演算子があります。排他的論理和xorはたまにしか見ませんが、他はよく見ますのでザックリ覚えておくと良いでしょう。
 一点、よく使う論理積と論理和が2つずつありますが、論理積、論理和としての意味は同じ。少し違うのは優先度で、「if(条件)」や「else if(条件)」など条件設定のところで「&&」と「and」を一緒に使った場合に「&&」が優先される、ということです。「||」と「or」も同様に「||」が優先されます。念のため「&」(アンパサンド)は一般的なキーボードの上の方の数字[6]キーを[Shift]キーを押しながら、「|」(パイプライン)はキーボード右上端の[¥]キーを[Shift]キーを押しながら、「!」(エクスクラメーション、感嘆符)はキーボード左上端の数字[1]キーを[Shift]キーを押しながらタイプすると入力できます。

名称演算子例の意味
論理積&&a==0 && b==0a==0かつb==0。両方が共に成立。andより優先
anda==0 and b==0a==0かつb==0。両方が共に成立
論理和||a==0 || b==0a==0またはb==0。少なくとも一方が成立。orより優先
ora==0 or b==0a==0またはb==0。少なくとも一方が成立
否定!!(a==0)a==0ではない。a==0が成立しない場合
排他的論理和xora==0 xor b==0a==0かb==0の一方だけが成立(両方成立は除く)

 そしてこれらの論理演算子は組み合わせたり、「( )」を使って複数の条件をグルーピングしたりすることができます。もちろん組み合わせはいくらでもありえますが、ここではif(条件)に組み込んだ場合を想定していくつか挙げてみます。参考にして下さい。
  • if( a==0 and b==0 and c==0 ) → 「aが0」かつ「bが0」かつ「cが0」なら
  • if( (a==0 and b==0) or c==0 ) → 「aが0かつbが0」または「cが0」なら
  • if( !(a==0 and b==0) ) → 「aとbがいずれも0」でないなら
  • if( !(a==0) and !(b==0) ) → 「aが0」でなく、かつ、「bが0」でないなら

4. 比較演算

 続いて比較演算です。これまでの資料で紹介してきたサンプルでは、条件分岐の設定のところで「==」(イコール2つ)を使ってきました。「左辺と右辺が同じなら」という意味であることはもう説明する必要もないでしょう。つまり、左辺と右辺を比較して「同じかどうか」判断しているわけです。まさしくこれが「比較演算」ということになります。
 もちろん比較演算はこれだけではありません。「左辺と右辺が違うなら」とか、数字の場合は「~以下なら」「~より大きいなら」といった条件設定もありえます。サンプルで確かめましょう。kihon04.htmlとkihon04.phpを次のように編集します。

  kihon04.html(基本タグは省略)
  

  kihon04.php(php部分以外は省略)
  

 まずkihon04.htmlは、「パスワード」の行を追加しただけです。もう何度もやっているので大丈夫なはずですが<input type="password">タグを使ってパスワード入力欄を設定しています。パスワードデータの識別名は「pass」としています。
 次にkihon04.phpの修正点は2つの「else if(条件)」と続く{ }を追加したことです。わかりますか?サンプルの12行目から19行目に登場します。
 まず追加された1つ目の「else if(条件)」を見ましょう。条件が「$pass!='ppp'」と指定されています。この意味は「$passの内容が'ppp'と違うなら」ということです。つまり、これまで見てきた「等しいなら」を表す「==」とは逆に、「!=」という記号で「等しくないなら」を評価をしている、ということになります。そして「違う場合」に続く{ }内の処理を実行することになっています。ですのでこの「else if」の部分の意味は「その前の条件が満たされない場合、もし$passが'ppp'でないなら、パスワードが違います、とecho命令で表示する」ということになります。
 追加された2つ目の「else if(条件)」に移ります。ここでは条件が「$tensu<0 or $tensu>100」と指定されています。さっそく上で見た「論理和or」が使われています。この意味は「$tensuが0より小さい、または、100より大きい場合」ということになります。「>」と「<」は、数学で使う場合と同じで、それぞれ「左辺が右辺より大きい」「左辺が右辺より小さい」ことを表します。そしてこの条件が満たされたら、続く{ }内の処理を実行しなさいということになります。全体としてまとめるとこの「else if」の部分は「その前の条件が満たされない場合に、もし$tensuが0未満または100を超える場合に、点数の範囲は0~100点です、とecho命令で出力する」という意味になります。
 ところで、ここで出てきた「!=」「>」「<」が比較演算子になります。これまで見てきた「==」の仲間です。感覚はつかめましたか?
 理解できたところで実際に動かしてみましょう。localhost経由でkihon04.htmlにアクセスし、間違ったパスワードを入れてみて下さい。メッセージが表示されればOK。ダメならよく見直して下さい。
 正しいパスワードを入れて、今度は点数を101点と入力してみましょう。これも点数の範囲を超えるのでメッセージが表示されるはずです。こういう条件分岐についてのテストでは「境界の値で試す」ことが重要です。この場合の境界の値は今試した「101点」と「100点」の境界とか、あと「0点」と「-1点」の境界もあります。これらについても入力して問題がないか確かめましょう。なお「境界の値」をテストすることを「境界値分析」とか「限界値分析」と言います。境界のところでエラーが起きやすいので、その辺をしっかりチェックしましょう、というわけです。

  


SPONSORED LINK


5. 比較演算子いろいろ

 上記サンプルでは「>」と「<」を確認しましたが、他にも種々の比較演算子があります。よく使うのは「==」と「!=」でしょうか。あと数値を扱う場合は当然「>=」や「<=」のような以上とか以下を指定する演算子を使います。
 それから比較演算子は、一般に、成立すれば「真」とか「TRUE」と言ったり、不成立なら「偽」とか「FALSE」言います。例えば、$aに「1」、$bに「2」が代入されているときに、「$a>$b」は「TRUE」、「$a<$b」は「FALSE」という具合です。正しくありませんが分かりやすく言えば「OK」と「NG」みたいな感じです(^^;。最初はなんだかわかりにくいですが、時々出てくるので慣れておきましょう。
 以下、一覧で確認しておきます。

演算子例の意味
==$a == $b$aと$bの内容が同じならTRUE
$a=7(数値)で$b='7'(文字列)の場合、両方7なので、同じとみなしてTRUE(ゆるい)
===$a === $b$aと$bが「内容」も「型」も同じならTRUE
$a=7(数値)で$b='7'(文字列)の場合、「型」が違うので同じでない、となりFALSE
!=$a != $b$aと$bの内容が同じでないならTRUE
$a=7(数値)で$b='7'(文字列)の場合、ゆるく見れば両方7で同じなので
同じでない、とはならずFALSE
<>$a <> $b
!==$a !== $b$aと$bが「内容」も「型」も同じでないならTRUE
$a=7(数値)で$b='7'(文字列)の場合、「型」が違うので同じでない、となりTRUE
<$a < $b$aが$bより小さいならTRUE。数学の<と同じ
<=$a <= $b$aが$bより小さいか同じならTRUE。数学の≦と同じ
>$a > $b$aが$bより大きいならTRUE。数学の>と同じ
>=$a >= $b$aが$bより大きいか同じならTRUE。数学の≧と同じ


練習問題

 このページで用いたファイルkihon04.htmlとkihon04.phpを使い、以下の課題に取り組みましょう。
  1. kihon04.phpの「名前も点数も入力されていません」と表示される点を修正し、名前も点数もパスワードも未入力の場合に、「何も入力されていません」と表示されるようにしなさい。
  2. 同様に現在、名前か点数のどちらかが未入力の場合に表示される「入力されていない項目があります」というメッセージを、パスワードが未入力の場合も表示されるようにしなさい。
  3. kihon04.phpを編集し、「点数は~点です」という表示の下に、50点以上70点未満の場合に「平均的な点数です」、70点以上の場合には「高い点数です」と表示する処理を追加しなさい。
練習問題の出力例



関連リンク



SPONSORED LINK





ページのトップへ戻る
SPONSORED LINK