BLOG 2017.09.15
はじめてのPHP 関数を作ってみたりしよう
伊藤
みなさん、こんにちは。
秋といえば、食欲の秋、スポーツの秋、読書の秋……そしてPHPの秋ですね。
いい加減、この流れにも飽き飽きしてきた頃だと思うのですが、何卒お付き合いください。
はじめてのPHPシリーズ
・【第一回】はじめてのPHP まずはちょっとだけラクするPHP
・【第二回】はじめてのPHP 変数とは?まずは使ってみよう!
前回のあらすじ
次どうしようか等ということを1mmも考えていなかったので次回のことは何も話していないのでした。
関数とは
まあ、頃合い的に関数のお話しをするのが一番でしょう。
読書の秋ということで、巨人の肩の上……つまり偉大なる先人による文章を読むのが定石ですね!
■関数(かんすう)とは – コトバンク
https://kotobank.jp/word/%E9%96%A2%E6%95%B0-2523
実は、事務作業等でパソコンを使う方にとっては「変数」よりもこちらのほうがなじみ深いのではないでしょうか。
そう、Excelの超基本である「SUM関数」、使いまくってますよね!?
では、PHPの関数の書き方を一つ見てみましょう。
<?php $x = round(3.4); ?>
この「round();」の部分がまさに関数となります。
ん?3.4の部分はどこいったの?という指摘はごもっともです。
エクセルのSUM関数を思い出してみましょう。
=SUM(A1:A5)みたいな感じで書きますよね。
A1:A5の部分はどっからどこまでという範囲を自由に指定できる部分です。
PHPの関数にも同じことが言えて、3.4の部分は材料となる数字になるわけです。
ちなみに……round();関数は小数点を切り捨てる関数です。
勘が鋭いあなたならば……そう、$xの中身は3になります。
関数を作ってみよう
PHPに最初から用意されている関数は、round();だけでなく、数百種類以上にも及びます。
ですが、使うものは必要なときに調べれば問題ナッシングです。
自分も、そんな感じです。
一番便利なのは、「関数」を自分で作る機能です。
さて……すごく有用なプログラムになってしまいますが、「何面かのサイコロ」を「何回」か振った合計の和を算出するプログラムを作ってみましょう。
もし、麻雀をするときにサイコロが無かったとき、このプログラムを使うと非常に便利ですよ!やった~~~~!
なんかよくわからないけどサイコロを500回振りたくなった!このプログラムがあってよかったーーーー!
どうしても9面とか、17面とか奇妙な面数のサイコロを振りたい。これがあるんですよ!
さあ……モチベーションが湧いてきました。
こんな状況が万が一有り得るならば、そう……作らねばなりません。
<?php
function diceroll($men,$kai){
$goukei = 0;
for($i=0;$i>=$kai;$i++){
$result = rand($men);
$sum = $sum + $result;
}
return $goukei;
}
$dice_a = diceroll(6,2);
$dice_b = diceroll(6,500);
$dice_c = diceroll(3,5);
$dice_d = diceroll(17,8);
?>
上記の例ですと、function diceroll($men,$kai){~}こそが、自作の関数となります!
自作関数は、使うよりも前に、ここにあるんだよということを作って示しておく必要があります。
こいつは、呼び出されるまで待機するだけで何もしないわけです。かわいいですね~。
そして、diceroll(数,数);の部分がその関数を呼び出している箇所になりますね。
$men、$kaiの部分は、「引数」と呼ばれます。
引数とは、つまりはエクセルで言う、SUM();の中に入る2つの数字のようなものです。
サイコロの面数は$men、
サイコロを振る回数は$kaiで表します。
そう、これはdiceroll関数の中に振るサイコロの面数と振る回数を入れられるということを示しています。
dicerollの中身を見てみましょう。
「for文」を用いて、$kaiの数だけ、rand();というPHPに最初から備わっている関数を実行するという内容です。
そしてその数の和が、どんどん「$goukei」変数に蓄積されていきます。
この「$goukei」変数は、ひたすらサイコロが振り終わったあと、この関数を呼び出した元に戻ります。
それが$dice_a、$dice_b、$dice_c、$dice_dになります。
最後の4行は、変数の中身をdiceroll();関数の結果にしますよという意味です。
$dice_aについては、6面サイコロを2回振ったら合計どうなるの?
$dice_bについては、6面サイコロを500回も振ったら合計どうなっちゃうわけ?
$dice_cについては、3面サイコロ……を5回振ったら合計どうなるっすか?
$dice_dについては、17面サイコロ!!を8回振ったら合計どうなるのか?
が入るわけです。
まとめ
駆け足になってしまいましたが、いかがでしたか!?
関数の作り方がわかるようになると、プログラミングの世界がグッと楽しくなりますよ!
次回はウェブ制作においてかなり実践的になる内容を扱っていこうと思います。
よろしくお願いします!