このページについて
このページではphpで使えるfunctionの解説をしています。実際に関数を作成し、使うまでわかりやすく解説していきます。
function
functionは関数を自分で作成(定義)する事ができる関数です。別名はユーザー定義関数と言って、その名の通り自分でオリジナルの関数を作成できます。
通常のif文やswitch文などはビルトイン関数といって、プログラミング言語を開発している団体によって作成されている関数になります。それを組み合わせて自作の関数を作り、自由に呼び出せるようにしてくれるのが今回のfunctionです。
functionの基本的な書き方は以下の通りです。
function 関数名(引数) {
処理内容
}
関数名は定義する関数の名前を書きます。予約語は使えませんが、基本的にはなんでもOKです。変数と同じくわかりやすい名前だったら良いです。処理内容に関しても他の関数同様、行いたい処理を書くだけでOKです。
引数というのがfunctionの重要なところだったりします。ここは「呼び出し元からfunctionへ渡す値/パラメータを設定する場所」となります。そしてここに書いた引数はそのfunctionの中でのみ、通常の変数と同じように扱う事ができます。この引数は変数と同じく$(ドルマーク)から始まる必要があります。
function test($num1,$num2){
echo $num1+$num2;
}
例えば上記のように関数(test)を作成した場合、引数はnum1とnum2となります。そして処理内容はnum1+num2となっています。引数同士を計算することもできますし、その他の処理も色々と行えます。
引数は必ず必要というわけではなく、省略してもOKです。ただし引数の数と渡す値の数は一致させておく必要があります。
functionの呼び出し方
functionは定義しただけでは何も行いません。実際に呼び出して初めて処理を行ってくれます。呼び出し方は簡単で、定義した関数名を宣言するだけです。必要に応じて引数を渡します。
function sum($num1,$num2,$num3) {
echo num1+num2+num3;
}
sum(1,2,3);
function echoN(){
echo 'Hello, World.';
}
echoN();
上の場合、sum関数を実行すると同時に1,2,3という引数を渡します。sum関数はその3つの引数を貰った上で、中にある足し算処理を行います。下の場合、function定義のところで引数の指定はしていません。そのため関数の呼び出し時にも引数を渡す必要はなく、中にあるecho処理のみが行われます。
functionの出力に関して
functionの出力は大きく2種類あります。
1つ目がechoです。これは「functionの処理の中で出力させたい場合」に使います。2つ目がreturnです。これは「呼び出し元に値を返す」時に使います。
使い分けは「呼び出しと同時に出力したい場合はfunction内にechoを入れた処理を、一時的に変数に入れておきたい場合はfunction内にreturnを書きます。それぞれの書き方は以下の通りになります。
function test($n){
echo $n*10;
}
test(10);
function test2($m){
return $m*10;
}
test2(10);
上のtest関数は実行したら中にあるechoによって、その場で値が出力されます。対して下のtest2関数はreturnで値を呼び出し元に返すだけなので、計算結果は出力されません。どちらも中にある計算式・引数は同じなので100となるわけですが、表示されるのは上のものだけです。
test2のようにreturnを使った関数の値を出力したい場合は、echo 関数名と書きます。
functionの上手な使い方
functionは複数行のコードを1行にまとめる役割も持っています。これはコードの再利用という観点と、複数のコードを使って組み上げる利点のどちらも持っています。
コードの再利用は「同じ処理はなるべく再利用する」という意味になります。同じ処理と言っても2行で済むものもあれば8行だったり様々です。それらを1つのfunctionで定義してしまえば、作成した関数名を呼び出すだけで2行や8行を再現する事ができます。
次の複数のコードを使って組み上げるというのは、簡単に言えばプラモデルです。プラモデルの場合パーツを1つ1つ組み上げていきますが、途中で違うパーツを組んでしまってもそこだけ分離して正しく組み直せば完成しますよね。それと同じで、functionで各パーツごとに関数を自作し、それを複数組み合わせることで1つの大きな処理を行わせる事ができます。これによって仮にエラーが出ても、全体を見なす必要は無く各functionごとに検証すればエラーを速く見つける事ができます。
このようにfunctionはいろんな面で助けてくれます。
再帰関数
次にfunctionの別の使い方を紹介します。再帰は「さいき」と言って、簡単に言えば自分自身を参照することを言います。もっとわかりやすく言えば無限ループですね。
function test(){
$x=0;
if ($x==0){
echo 0;
}
test();
}
これはFatal errorを引き起こします。その理由は処理の順序にあります。
- test()を呼び出すと、まず$xが宣言されて値0が代入される。
- if文で式($x==0)なので、trueとなって処理が行われます。
- echo 0で0を出力。
- 処理が終わったら再びtest()を呼び出し。
- 1の$x=0から再開する。
これのループとなり、$xは永遠に0のままです。そして注目すべきは最後のtest()です。これはtest()の中で書かれているので、「test()を実行中にtest()を実行する」という書き方になっています。これが再帰関数の書き方となります。
再帰関数を書く上で注意すべき点があります。それは無限ループにならないように、停止条件を必ず設定することです。これが無いとずっと処理を続けるため、マシンに相当の負担を与えることになります。
無限ループにならない再帰関数の書き方は以下の通りです。
function test($n){
if($n>0){
return $n * test($n-1);
}
return 1;
echo test(5);
これは一体何かというと、階乗を計算する再帰関数です。階乗とはその値になるまで掛け算をするみたいなやつです。例えば5だったら5*4*3*2*1みたいな感じです。今回の処理内容を順番に書くと
- test関数の呼び出しと同時に5を渡す。
- if文が実行され、$nが5なので0より大きいためtrue処理を行う。
- returnで値を返す。中身は引数 * test($n-1)
- 再びtest関数が呼び出され、今度は$n-1の値について処理を行う。この場合は4が渡されています。
- 4>0なので再びreturnで値を返す。
- 再びtest関数が呼び出され、また$n-1の値について処理を行う。今回は3が渡されています。
- 最終的にどんどんと数が減っていき0になります。そしたら0>0という式はfalseになるため、下にあるreturn 1が実行されて再帰関数のループ処理は終了となります。
このように関数の中で自身を使うことでめんどくさそうな計算も簡単に行わせる事ができます。
まとめ
functionは自分で行わせたい処理を1つにまとめる事で繰り返し再利用できる関数を作成する事ができます。最初はfunctionの作成と呼び出しと色々と覚える事が多いですが、慣れて仕舞えばかなり便利なものとして扱っていけます。
- phpの基礎
- phpとは?JavaScriptとの違いは?みたいなことから、基本の書き方などを解説。
- echoとprint
- 画面に文字を出力する2種類の言語構造の使い方
- 変数
- phpで使える変数の扱い方などを解説しています。
- 変数のスコープ(有効範囲)
- 変数のスコープについての解説です。
- var_dump
- 変数の情報を見ることができる関数
- print_r
- 変数の情報をわかりやすい形式で表示する関数
- 配列と連想配列
- 配列と連想配列の書き方と、便利な関数の解説など。
- key
- 連想配列のキーを返してくれます。内部ポインタ関係あり。
- count
- 配列や連想配列の要素数を数えてくれる関数の使い方解説。
- ソート関数
- 配列に対してソートを行う関数の中から、代表的な5つの使い方解説です。
- array_reverse
- 配列の中身の順番を反転させる関数です。
- array_chunk
- 配列を指定した数で分割させるarray_chunk関数の使い方解説です。
- array_combine
- 2つの配列を足して1つの連想配列にする関数です。
- array_diff
- 2つの配列を比較して、存在しない値を出力する関数
- array_push
- 配列に対して後方に要素を追加する関数
- array_unshift
- 配列に対して先頭に要素を追加する関数。
- array_shift
- 配列の先頭の要素を取り出す関数。
- array_merge
- 複数の配列を統合して1次元の配列にする関数
- array_intersect
- 2つの配列を比較して、両方に共通するものを出力する関数
- include
- includeを使って別のphpファイルを読み込む方法の解説。
- if文
- if文を使って処理を変更させる方法の解説。
- switch文
- switch文を使って複数の処理分岐を行わせたい時に使います。
- forループ
- forループを使って同じ処理を行わせる方法の解説です。
- whileループ
- whileループを使って同じ処理を行わせる方法の解説と注意点。
- do-whileループ
- do-whileループを使って同じ処理を行わせる方法の解説です。
- foreachループ
- foreachループを使って配列内のアイテム全てに処理を行う方法の解説です。
- continue
- ループ処理の残りをスキップしつつ、ループの先頭に戻る制御構造
- ループのネスト構造(入れ子)
- ループの中にループを入れる書き方や考え方の解説。
- function
- functionを使って自作の関数を作成・使用する方法の解説。
- 引数の種類と書き方解説
- functionで扱う引数の種類と書き方を解説
- return
- returnの使い方と関数での使い方解説。
- class
- classを作成して変数と関数を1つにまとめる方法と使い方の解説。
- constructとdestruct
- classのインスタンス作成と同時に処理を行うconstructと、スクリプトの終了と同時に実行するdestructの解説です。
- インターフェイス
- インターフェイスという用語の解説と、実際の使い方解説
- トレイト
- コードを再利用するのに便利なトレイトの解説です。
- 列挙型
- プログラム中で使う変数名をあらかじめ定義しておく。そんな感じの型。
- PDOを使ってMySQLへ接続
- PDOを使ってMySQLへ接続し、データを取得する方法の解説です。
- データの加工と表示
- PDOでデータベースから取得したデータを加工して表示する方法の解説です。
- HTMLフォームのデータ受け取りと表示
- HTMLで作ったフォームからのデータの受け取り方法と、その表示方法の解説です。