技術情報

演算子、条件文 を利用して占いプログラムを作る | WordPressで始めるPHPプログラミング(2)

2016.10.14


前回は導入からはじめてPHPでの表示部分で終わってしまいましたので、今回はプログラミングらしく計算をしたり、条件分岐をするのに必要な方法をご紹介します。

計算を実際に利用するのは商品販売サイトや見積のようなお金の計算を直接的にするものから、カレンダーを自前で表示したりする日付の計算や、コーディングされたデザインを記事数に合わせてうまく表示をさせたい場合等、様々な場面で利用します。

演算子

前回紹介しました変数を利用して計算するプログラミングを書いてみます。

$a = 1;
$b = 2;
$c = $a + $b;

echo "c = " . $c;

こちらの表示は「c = 3」になります。

上記 ‘+’ の記号は四則演算子には下記の種類があります。

+ 加算
減算
* 乗算
/ 除算
% 剰余
** 累乗(※ PHP5.6から利用可能)

累乗はpow()でも書き換えられます。WordPress自体はPHP5.6以上を奨励していますので、利用して問題ないでしょう。

また、代入演算と言われるものがあります。

$a = 1;
$b = 2;
$a += 1; // $a 自身に1を足す
$b -= 2; // $b 自身から2を引く
$c = $a + $b;
echo "c =" . $c;

こちらの表示は $a が 2 、$bが0になるので「c = 2」になります。

加算子減算子という書き方もあります。

$a++;

$a += 1; と同じですが、 ++の方を使うのが慣習になっています。

比較演算子

2つの数字や文字列を比べて、なんらかの判定結果を返します。
基本的には 後で紹介する if 文等の制御文で判定し、プログラムの流れを制御します。

$a = 1;
$b = 2;
if( $a === $b ) echo 'aとbは等しい'; else echo 'aとbは等しくない';

こちらの表示は「aとbは等しくない」になります。

比較演算子には下記のようなものがあります。

$a == $b $aと$bの値が等しい時にtrueを返す
$a === $b $aと$bの値が等しい、かつ2つの型が等しい時にtrueを返す
$a != $b $aと$bの値が等しくない時にtrueを返す
$a !== $b $aと$bの値が等しくないもしくは型が等しくない時にtrueを返す
$a < $b $aは$bよりも小さい時にtrue
$a > $b $aは$b以下の時にtrue
$a <= $b $aは$b以上の時にtrue
$a <=> $b $aが$bより小さいときに負の値、 $bと等しいときに0、$bより大きいときに正の値。※ PHP7.0から利用可能

PHPでは比較演算子で気を付けなければならないものが「 == 」と「 === 」の違いについてです。

==で比較を行うと左右別な型でもなんとか比較してくれます。ただし、数値に変換してから比較をしますので、コードの見た目と結果が違う場合がしばしば起こります。

  $a = "01";
  $b = 1;
  if( $a == $b ) echo 'aとbは等しい'; else echo 'aとbは等しくない';

この表示は$aが1に変換され「aとbは等しい」になります。

3項演算子

3項演算子とは3つの項目を入力値にして結果を返す演算子です。

条件式 ? 真なら返す値 : 偽なら返す値

になります。例えば

$c = $a === $b ? 'aとbは等しい' : 'aとbは等しくない';
echo $c;

となります。読みやすくなったでしょうか。

条件文

先ほどでてきた if 文は case文です。使い方は下記の通り、

if (条件式1 )

} ele if (条件式2 )

} else {

}

繰り返し文
for文、while文があります。

下記の例では 1 から 10までの数を合計した結果を表示します。

$sum = 0;
for ($i = 1 ; $i <= 10 ; $i++ ) {
	$sum += $i;
}

それでは、これらを利用して何かプログラムを書いてみましょう。今回は rand というランダム数を返す関数を利用して、占いプログラムを書いてみます。randはphpの関数で指定した数字の範囲内で乱数を返します。

$random_value = rand(1, 7);
echo "今日の運勢は ・・・・";

if ($random_value === 1 ) {
   echo "大吉";
} else if ($random_value === 2 ) {
  echo "吉";
} else if ($random_value === 3 ) {
   echo "中吉";
} else if ($random_value === 4 ) {
   echo "小吉";
} else if ($random_value === 5 ) {
  echo "末吉";
} else if ($random_value === 6 ) {
  echo "凶";
} else {
  echo "大凶";
}

echo "です!";

※ 運勢の順序はこちらを参考にしています。

これでページを開くたびにランダムで今日の運勢が表示されるようになりました。ランダム表示を応用すればヘッダー画像をランダムで切り替えたり、表示している広告バナーをランダムに切り替えて表示でき、限られたスペースをある程度有効活用できます。

でも、これではページを開くたびに運勢が同じにになります。興味本位でおみくじを2回引いて違う運勢が出てしまい、わかっていてもゲンナリした経験はないでしょうか。
今日見た「今日の運勢」は今日の間だけは(たとえ大凶であったとしても)何度開いても同じ運勢であってほしいものです。

そこで、上記のプログラムにCookie(クッキー)という技術を利用して、開いた人のブラウザに24時間だけ同じものを表示します。

Cookieは開いた人のブラウザに任意の情報を埋め込む技術で、ログイン状態の保持等に利用されています。もちろんどのサイトからもこのCooke情報は参照できるので、パスワードをそのまま保持する事はありませんが、プログラムで利用する場合には十分注意するべき部分ではあります。

セットする時 setcookie(‘セットする値を識別するキーワード’, セットする値, クッキーの有効期限, 以下略)
参照する時 $_COKKE[‘セットする値を識別するキーワード’]

※ 注意事項として、setcookieを実行する時はすべての表示部分よりも前に実行しないといけません。今回のプログラムはhtmlタグを何も表示しないテンプレートファイルを利用していますが、もしデザインを入れる場合にはsetcookieがある部分をより前で実行してください。

下記の処理は wp_omikuji というcookieに 0大きい数字がセットされていたら、それを $random_value にセットします。もしそのcookieがなければ、randで1から7までのどれかをセットし、cookieのwp_omikujiにその値をセットします。期限は現時刻からの秒数で、 60(秒) x 60 (分) x 24(時間) で24時間の秒数を現在の1970年1月1日からの足しています。

$random_value = 0;

if (isset($_COOKIE['wp_omikuji']) && intval($_COOKIE['wp_omikuji']) > 0)  {
	$random_value = intval($_COOKIE['wp_omikuji']);
} else {
	$random_value = rand(1, 7);
	setcookie('wp_omikuji', $random_value, time() + 60 * 60 * 24);
}

echo "今日の運勢は ・・・・";

if ($random_value === 1 ) {
   echo "大吉";
} else if ($random_value === 2 ) {
  echo "吉";
} else if ($random_value === 3 ) {
   echo "中吉";
} else if ($random_value === 4 ) {
   echo "小吉";
} else if ($random_value === 5 ) {
  echo "末吉";
} else if ($random_value === 6 ) {
  echo "凶";
} else {
  echo "大凶";
}

echo "です!";

これで一旦表示された運勢は24時間その人のブラウザには同じ運勢が表示されるようになります。

いかがでしょうか。今回は計算や条件文等を利用して、プログラムらしい動きを取り入れました。
ランダム要素が入ると、同じサイトでも気分が変わり楽しいですよね。この記事も皆様の楽しいサイト作りに貢献できれば幸いです。