Friction River Software

  • お問い合わせ

CakePHP5入門【PHP言語の文法編②】選択

B美

今回は「選択」処理についての話よ

A子

了解

C菜

頑張るです~

B美

まずはサンプルコードを作って、実行確認していきましょう

ホームディレクトリの下の「html」ディレクトリを開いて、「test2.php」を右クリックしてから「L3afpadリーフパッドで開く」を選択します
(もちろん「Plumaで開く」でも良いわよ)

B美

「<?php」と「?>」の間にあるコードを削除してから、下記のコードを打ち込んでね

<?php

$a = 5;
$b = "Hello";

if ($a == 5) {
  echo '$aは'.$a.'です。';
}

echo "<br /><br />";

if ($b == 'hello') {
  echo '$bはhelloです。';
} else {
  echo '$bはhelloではありません。';
}

?>

入力が終わったら「test3.php」というファイル名で保存すること

C菜

ブラウザ(Firefox ESR)で確認してみました~
(URLは「localhost/test3.php」)

A子

一行目は納得だけど、二行目は何で?

変数$bの内容は「hello」じゃん

C菜

頭文字が違います~

H」と「h」は別物なのでは~?

B美

C菜正解!
それを検証するために下記の赤字部分を追記してみて

<?php

$a = 5;
$b = "Hello";

if ($a == 5) {
  echo '$aは'.$a.'です。';
}

echo "<br /><br />";

if ($b == 'hello') {
  echo '$bはhelloです。';
} elseif ($b == 'Hello') {
  echo '$bはHelloです。';

} else {
  echo '$bはhelloまたはHelloではありません。';
}

?>

入力したら上書き保存して、ブラウザを更新してね



C菜

ブラウザに表示された実行結果が、さっきと変わってます~

B美

これで何となく分かったんじゃない?

.「if」の後ろにあるカッコ内の条件判断が「trueトゥルーしん…命題が正しい)」であれば、そのすぐあとのブロック(波カッコで囲まれている部分)が実行される

if (条件式) {
  条件式がtrueのとき、実行;
}


.「if」の後ろにあるカッコ内の条件判断が「trueトゥルーしん…命題が正しい)」であれば、そのすぐあとのブロック(波カッコで囲まれている部分)が実行され、「falseフォルス…命題が正しくない)」である場合は「else」の後ろのブロックが実行される

if (条件式) {
  条件式がtrueのとき、実行;
} else {
  条件式がfalseのとき、実行;
}


.「if」の後ろにあるカッコ内の条件判断が「trueトゥルーしん…命題が正しい)」であれば、そのすぐあとのブロック(波カッコで囲まれている部分)が実行され、「falseフォルス…命題が正しくない)」である場合、次に「elseif」があればその条件を判断する

if (条件式1) {
  条件式1がtrueのとき、実行;
} elseif (条件式2) {
  条件式1がfalseで、条件式2がtrueのとき、実行;
} else {
  条件式1も条件式2もfalseのとき、実行;
}

あ、「elseif」はいくつでも書けるから、上記の3分岐だけじゃなく4分岐でも5分岐でも作れるわよ
【パターン



【パターン



【パターン

C菜

条件式で使う比較の記号って「==」以外には何があるんですか~?

B美

比較演算子の一覧は次の通りよ
 比較演算子意味
==値が等しい
===値と型の両方が等しい
!=値が等しくない
!==値または型が等しくない
<左辺が右辺より小さい
<=左辺が右辺以下
>左辺が右辺より大きい
>=左辺が右辺以上

ほかにもあるんだけど、このくらいを知ってれば十分よ
結局のところ、②と④を無視すれば、Excelのif関数で使う比較演算子と大差ないわね

C菜

かた」って何ですか~?

B美

うーん、例えば

$a = 123;
$b = "123";

…とあった場合、$aは「整数型」で、$bは「文字列型」になるの

んで、「$a == $b」は「true」になるし、「$a === $b」は「false」になる(型が異なるから)ってわけ

A子

条件が複数あって、それらを組み合わせるときはどうすんの?

例えば「条件式1 かつ 条件式2」とか「条件式1 または 条件式2」って感じ…

B美

論理演算子は以下の三つね
 論理演算子意味
NOT!否定(~ではない)
AND&&論理積(~ かつ ~)
OR||論理和(~ または ~)

あ、演算子には優先順位があるから注意してね
(カッコが最も優先されるのは数学と一緒だから、悩んだらカッコで囲めば良いんだけどね)

余談だけど「||」で使っている「|パイプ」という文字は、キーボードの右上にある[\]のキーを[Shift]キーと一緒に押します([Shift]+[\]ってことね)

C菜

優先順位って、「掛け算(*)や割り算(/)は足し算(+)や引き算(-)に優先する」ってやつですか~?

B美

そう
C菜の言う算術演算子にはとうぜん優先順位があるんだけど、論理演算子にも優先順位があるのよね

A子

あ、「論理積」と「論理和」ってことは…

」は掛け算で、「」が足し算だから…

B美

大正解!
「論理積(AND)」は「論理和(OR)」に優先するってこと

なお、もっとも優先されるのは「否定(NOT)」だけどね

A子

うーん、まぁ何となくは理解したよ

慣れるまでは大変そうだけど…(苦笑)

B美

A子、良いこと言った!
そう、プログラムなんて所詮は「慣れ」だからね

それじゃ、次はちょっと実用的なプログラムを書いてみましょうか
さっきの「test3.php」を書き換えて、「test4.php」というファイル名で保存してね

<?php

$test_file = 'test1.php';

if (file_exists($test_file)) {
  $info_file = file_get_contents($test_file, false);
  $result = htmlspecialchars($info_file, ENT_QUOTES);
  echo nl2br($result);
}

?>

C菜

ブラウザで「localhost/test4.php」を見てみると、前回作った「test1.php」の中身が出ました~

A子

これって、テキストファイルを読み込んで、その内容をブラウザ上に表示するプログラムってことかしら

ん?「if」の直後のカッコ内って条件式じゃないような?

B美

file_exists($test_file)」の部分でしょ?
これって「file_exists($test_file) == true」と書いても良いんだけど、ムダだから書いていないだけよ

だって「if」の直後のカッコ内ってtrueかfalseかを判断するものであって、file_existsファイルイグジスト」関数の戻り値って「true」か「false」の二択だからね
(そのファイルが存在するなら「true」、見つからなければ「false」が返ります)

C菜

file_get_contentsファイルゲットコンテンツ」は何となく分かります~

ファイルの読み込みですよね~?

B美

その通り

んで、「htmlspecialcharsエイチティーエムエルスペシャルキャラクターズ」関数はHTMLで意味のある文字、例えば「<」と「>」を「&lt;」と「&gt;」という文字列に変換してくれるのよ
(通称「サニタイジング」)

A子

nl2brエヌエルツービーアール」って何?

それも関数の一つ?

B美

そうよ

テキストファイル中にある改行コード(改行文字)を「<br />」というタグに変換してくれるのよ
(ブラウザ上で改行したい場合、「<br />」タグが必要だからね)

そうねぇ、さっきのブラウザ上で右クリックして「ページのソースを表示」をクリックしてみて



B美

この赤線で囲んだ部分がプログラムで生成した個所ってわけ

C菜

変数「$test_file」の値を別のファイル名に変えて試してみるです~

「index.html」とか「info.php」とか…

B美

とても良い姿勢ね

今回作成した「test3.php」の中で使っている変数($aや$b)の初期値についても、色々と変更して実行確認してみてちょうだい
(「試行錯誤トライ&エラー」こそがプログラム学習の王道だからね)

さて今回はこれで終了よ
次回は「繰返し」処理について説明していくわね

C菜

「選択」処理については、Excelのif関数を使ったことがありますからイメージしやすいんですけどね~

「繰返し」処理って難しそうです~

A子

だねー

B美先生、分かりやすい説明を頼むよ

B美

任せなさい!

そんなに難しくないから…多分(笑)

A子

多分かよ!