WEBシステムの開発プラットフォーム LIB PHP Framework! 高速でセキュアなフルスクラッチ開発を今すぐ開始できます。

PHP基礎学習

Chapter2. 関数とは

プログラミングにおける関数(かんすう)とは、一定の処理をまとめ、繰り返し呼び出しできるようにしたものです。
関数には、処理の結果を返すものと、処理のみを行い結果を返さないものの2種類があり、PHPでは共通してfunction(ファンクション)と呼びます。

1. 処理の結果を返す関数

関数は下記のような書式で定義します。

ここでは、sumNumberが関数名となり、続く括弧内に変数$aと$bを定義しています。
この変数は引数(ひきすう)と言い、関数を呼び出す際にデータを引き渡します。 引数はカンマ区切りで必要な数だけ定義できます。

次の波括弧内に処理を行うステートメントを記述し、最後にreturn分によってデータを返します。
function sumNumber($a, $b) {
$n = $a + $b;
return $n;
}

$x = 20;
$y = 10;
$z = sumNumber($x, $y);

echo $z; // 「30」が出力されます。
sumNumber関数では引数$aと$bを使用して加算処理を行い、計算結果を代入した$nを返しています。
波括弧内をローカルスコープと言い、ここで定義した変数$a、$b、$nは関数内部でのみ有効で、関数外部では定義されていませんのでNULLとなります。

一方、呼び出し側では$xに20を、$yに10を代入し、sumNumber関数に$xと$yを引き渡しています。 次にsumNumberの実行結果を$zに代入しています。

ショッピングカートなどでは、下記のようにして税込み価格を計算する場面があります。
function amount($price, $tax, $count) {
$unit = $price + ($price * $tax / 100);
return $unit * $count;
}

$item["price"] = 2000;
$item["tax"] = 10;
$item["count"] = 2;
$total = amount($item["price"], $item["tax"], $item["count"]);

echo $total; // 「4400」が出力されます。
amount関数では引数に渡された価格に税額を加算し、課税単価での合計金額を返しています。
呼び出し側の$itemは連想配列で、ショッピングカートに追加された商品の価格、税額、購入数を保持しています。

<関数の命名規則>
関数名は半角英数字アンダースコアで命名します。(先頭に数字は使用できません。)
前述のsumNumber()のように、2つの語句をつなげた命名では、先頭の語句が小文字で始まり、以降の語句を大文字で始める書式をcamel case(キャメルケース)と言います。
また、SumNumber()のように、全ての語句を大文字で始める書式をpascal case(パスカルケース)と言います。
どちらの書式も有効ですが、キャメルケースに統一しましょう。

2. 処理の結果を返さない関数

関数は基本的に処理結果のデータまたは、処理の成功か失敗を表すbool値を返しますが、
結果を返さない関数を定義することもあります。

下記の例では、マイページなどへのログイン状態を保持する$_SESSION変数をチェックして、
ログインしていない場合にトップページへリダイレクトさせます。
function auth() {
if (!$_SESSION["mypage"]["user"]) {
header("Location: index.html");
exit();
}
}
ifは分岐を表す制御構文です。 制御構文については次章で学習しますが、ここではデータがNULLか否かを判定しています。

$_SESSION(セッション)は、スーパーグローバルと呼ばれる変数の1つで、ブラウザが閉じられるまでの間情報を一時保存しておく為のもので、PHPによって自動的に定義された連想配列です。 スーパーグローバル変数はプログラミングコードのあらゆる箇所で参照できます。

ここでは$_SESSION配列の要素にmypage配列があり、さらにmypage配列の要素にuser配列があるかを判定しています。
user配列がない場合には、PHPのビルトイン関数であるheader()を呼び出しリダイレクト処理を行っています。 次行のexit()はPHPを強制終了します。

3. 内部(ビルトイン)関数

前項のheader()やexit()のように、関数にはPHPに組み込まれたビルトイン関数があります。
PHPプログラミングでは、これらの関数を使用して複雑な処理を簡素化させることが出来ます。

header()は、HTTPヘッダー情報を出力します。
そもそもWebページはHTMLドキュメントを出力しますが、内部的にはヘッダーとボディーがセットになった文字列です。
ブラウザはHTTPヘッダーの内容を読み取ることで、ドキュメントの種類や文字コードの指定や動作の要求を解釈します。
header("Location: index.html");
exit();
これはロケーションヘッダーと呼ばれるもので、ブラウザに指定ページへのリダイレクト(転送)を要求しています。

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=sample.csv");
echo $data;
exit();
これはドキュメントの種類と表示方法を指定するもので、ブラウザにCSVファイルのダウンロードを要求しています。

exit()はPHPを強制終了します。 その後につづくステートメントは実行されません。
exit("必要な情報が送信されませんでした。");
引数に文字列を渡すことでPHPの終了前にメッセージを出力することが出来ます。

プログラミングコードの動作確認に不可欠な関数がvar_dump()です。
var_dump()は、型や値を含む構造化された情報を出力します。
<div class="test">

<?php
$item["price"] = 2000;
$item["tax"] = 10;
$item["count"] = 2;
var_dump($item);
?>

</div>
Web Studioのページ編集で、エディター内の任意の箇所に、上記のコードを入力してみましょう。
echo文がデータを文字列として出力するのに対し、var_dump()は型と値を出力します。
開発中は、プログラミングコードのあらゆる箇所でvar_dump()を実行し、変数の状態を確認します。

1項や2項のように、プログラマーが定義する関数をPHPのビルトイン関数に対し、ユーザー定義関数と言います。
フレームワーク実践講習の「Chapter2. ユーザー定義関数の追加」を参照して、Web Studioでの関数の定義方法と使用方法を学習しましょう。