このページについて
このページではPHPで使えるユーザー定義関数のfunctionの引数の種類なんかを色々とまとめています。
はじめに
ユーザー定義関数のfunctionは「自分で関数を定義してどこでも使えるようにする」というものです。PHPで使えるarray関係の関数なども、このように定義されているからその通りの機能が使えるようになっています。function自体の詳しい解説はこちらのページで行なっています。
引数の種類
functionでは引数と呼ばれる値を受け取ることができます。その値を関数内で処理することで値が変化し、結果を返すことができるようになっています。
その引数の種類なんかも色々と種類があるので、今回はそれを中心に解説していきます。
リファレンス渡し
リファレンスとは「言及・参考・参照」と言った意味です。リファレンス渡しのことを超簡単に言うと、受け取った引数の中身を変更せずに付け足して返すだけという感じです。
通常の引数は変数名を指定するだけでOKなんですが、リファレンス渡しの場合は変数名の前に&を付与します。
そして変数に付け加えて入れる場合は.=を使用します。
function test(&$a){
$a .= 'text';
}
$b='b';
test($b);
echo $b; //結果はbtextとなります
このように書くと、結果はbtextとなります。$bの内容(b)に、$aの中身を付与してる感じですね。逆に.=ではなく普通の=にした場合、引数の中身が関数内で宣言したものに変わります。
そしてそもそもですが、&$ではなく普通に変数名のみで関数を作成した場合の書き方と結果は以下の通りです。
function test($a){
$a = 'text';
}
$b= 'b';
test($b);
echo $b; //bが出力される
この場合は普通の引数としての扱いになるので、$bの中身を受け取りますが関数内の$aはどこにも使用されないため、無視されます。最終的にecho $aとしても未定義関数の警告が出てきます。
デフォルト引数値
関数の受付時にデフォルトの値を設定する方法です。これは引数を渡す時に上書きすることもできますし、無かったらなかったで指定したデフォルト値を使って処理を行います。
デフォルト値は引数のところで通常通りの変数宣言と代入を行うだけでOKです。ただしいくつかルールがあって
- 変数などは不可
- 常に固定の定数のみOK
- テキストOK
- 計算式OK
- デフォルト値の無い引数は左に書く
これだけ覚えておけばOKです。実際にこれらを守った上で書くとこんな感じになります。
function test($a, $b=100, $c=200){
echo $a*$b*$c;
}
test(2); //結果は40000です(2*100*200=40,000)
まず$aはデフォルト値の無い引数です。そのため左に書き、関数呼び出し時に値を指定します。
次に$bと$cはデフォルト値がそれぞれ100と200で設定しました。そして関数の中身は全て掛け算をするというもので、結果は2を入れたら40000となります。
デフォルト値の上書き
次に、デフォルト値の上書きをしてみます。先ほどのコードの関数呼び出しのところで、上書きするだけでOKです。そして名前付き引数というものもついでに紹介します。これはデフォルト値の中間をすっ飛ばして、特定のデフォルト値を上書きするために使用します。
function test($a, $b=100, $c=200){
echo $a*$b*$c;
}
test(2,2); //結果は800(2*2*200=800)
test(2,c:20) //結果は4000(2*100*20=4000)
まずtest(2,2)から解説します。これは最初に書いた$aに2を入れるのと、その次の$bに2を入れるという書き方になります。そのため最終結果は2*2*200という計算になり、800となります。
次に一番下のtest(2,c:20)について。これは名前付き引数というやつで中間のデフォルト値のセットをすっ飛ばしています。この場合はbのみデフォルト値の100を使用して、cのみ変更すると言う書き方になります。「引数名コロン値」という感じで書きます。
可変長引数リスト
関数の引数の数が不特定多数ですよって言う時に使うものになります。買い物リストの項目とか日によって違うみたいなイメージですね。それを解決するのが、この可変長引数リストになります。
可変とはその都度変化するとかいう意味合いです。そんな感じで処理のたびに引数の個数が異なっていても問題ないという便利なやつです。
書き方はシンプルで、引数名の前に…を使用します。
function test(...$num){
$a = 0;
foreach ($num as $b){
$a += $b;
}
return $a;
}
echo test(10,20,30); //60
echo test(1,2,3,4,5,6,7,8,9,10); //55
2つの結果を記載しましたが、引数の数が大きく異なりますがどちらもしっかり計算結果が出ています。可変長引数は受け取った引数を関数に渡す際に配列として渡します。そのため配列用のforeach関数が使えるのでかなり簡単な記述で済みます。
可変長引数と通常の引数の同時使用も可能です。通常の引数を左に、可変長リストを右に書きます。引数を渡す際に左から順番に引数の変数に代入されていき、残ったもの全てが可変長リストに放り込まれます。
function test($a,$b,...$num){
$e = $a+$b;
$c=0;
foreach($num as $d){
$c += $d;
}
return $e+$c;
}
echo test(1,2,3,4,5,6); //結果は21
この場合、まず左の1は$aへ代入されます。次の2が$bへ代入されます。そして残りの3から6までは全て可変長引数リストに放り込まれます。
関数内ではまずaとbを足して、次にforeachで可変長リストの中身を足しています。最終的に全て足して、結果3+18で21となっています。
名前付き引数
すでに上で触れていますが、PHP8.0から名前付き引数というものが使用可能になりました。これまでは引数の順番・値などを意識して書く必要がありましたが、名前付き引数を使用すればそんなもの関係なく書けます。
具体的には「関数の定義時は今まで通り書くけど呼び出し時に引数の名前と値をセットで書く」という方法で実現できます。
function sum($a,$b,$c){
echo $a*$b-$c;
}
sum(10,2,4); //16
sum(b:10,c:2,a:4); //38
これら二つとも同じ数値を渡していますが、それぞれの渡し方を見てみると違う点がありますね。2つ目の書き方が名前付き引数というものになります。
「引数名:値」という書き方をすることで、その引数名に対応するところに自動で入れてくれます。超便利です。
デフォルト値を使用して関数の宣言と同時に値をセットしているものをそのまま使用したり、位置だけ揃えて変更とかも一応できます。
function test($a=10, $b=4, $c=2){
echo $a * $b - $c;
}
test(5,c:10,b:4); //結果は10
test(200); //結果は798
このようにデフォルト値を使用して関数を組むことが後々で便利になったりするっぽいのでデフォルト値を心がけたいですね。
- 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で作ったフォームからのデータの受け取り方法と、その表示方法の解説です。