3-7. 関数2(関数の自作)

前章では、PHPにあらかじめ組み込まれている組込関数を解説しました。本章では、関数を自作する方法を解説します。本章の内容を理解すれば、効率的に処理をまとめたり、使い勝手の良い関数を自作することができるようになります。

関数の基本

まず最初に関数の基本形を見てください。

function 関数名( 引数 ) {
// 処理
// 処理
 return ( 戻り値 ) ;
}

function というのは、これから関数が始まりますという宣言です。関数名は独自に決めるものです。波かっこの次から処理が続きます。

そして大切なのが return から始まる戻り値の返却です。これは必須ではありません。

処理した結果を呼び出し元に返します。例えば100という数値を与えれば110と返す消費税計算のプログラムを考えてみましょう。

消費税計算プログラムに対し、計算したい対象額を渡します。それが引数です。その引数に対して1.1倍した結果を返します。結果を返すのがreturn文です。返したい結果が1.1倍した結果です。これが戻り値です。

呼び出す時の基本形です。

関数名( 引数 );

全体の流れ、イメージできたでしょうか?

関数のいろいろなパターン

関数には、引数があったりなかったり、戻り値があったりなかったり、というパターンがあります。それらを順に見ていきましょう。

関数(引数なし)

<?php
// 関数(引数なし)
function greeting() {
  echo "Hello, PHP!" . "\n";
}

greeting();

Hello, PHP!

greetingという関数を定義して、その下のgreeting();で関数を呼び出しています。この場合関数はecho文だけ実行されて終わりますので、Hello, PHP!が表示されて関数は処理終了です。

引数は省略可能で、ない場合は呼び出し時にカッコの中身は空になります。

関数(引数あり)

<?php
function greeting($name) {
  echo "Hello, " . $name . "\n";
}

greeting("Mike");
greeting("Bob");

$name = "Judy";
greeting($name);

Hello, Mike
Hello, Bob
Hello, Judy

関数本体はgreetingです。今回は引数 $name が定義されています。

Hello, という文字列に、受け取った引数$nameを連結してechoしています。最後のJudyの呼び出しを見てみると、変数$nameにJudyという文字列を代入し、それを引数として渡しています。

固定の値だけでなく、変数も引数にできるのです。

関数(引数、戻り値あり)

<?php
function getTaxIncludedPrice($price) {
  $rate = 0.1;
  return $price * (1 + $rate);
}

$apple = 100;
$result = getTaxIncludedPrice($apple);
echo "りんごは税込で" . $result . "円です\n";

りんごは税込で110円です

関数 getTaxIncludedPrice を定義しました。引数として$priceを受け取ります。

関数内で税率を定義、代入し、それを使って$priceに1.1倍して税込金額を算出、最後に結果をreturnしています。

$result = getTaxIncludedPrice($apple); はとてもプログラミングらしい記述です。関数の戻り値を、そのまま$resultという変数に代入しています。このような記述もできるのです。

そして最後は、文言と結果$resultを結合したものをechoで出力しています。

スコープ

PHPの変数は定義した場所によってその変数が使える範囲が変わってきます。
この範囲のことをスコープといいます。
スコープにも種類があるのでまずはコードを見てみましょう。

<?php
$a = "グローバルスコープ";

function sample() {
  $b = "ローカルスコープ";
  echo $b . "\n";
}

echo $a . "\n";

sample();

echo $b . "\n";

変数と関数を定義してそれぞれ呼び出すようなプログラムを用意しました。

9行目は$aの中身を出力する処理です。
これは今までのおさらいなので難しくなかったと思います。

sample()は関数内で定義した$bを出力する処理です。
これも難しくありませんね。
では、11行目の$bを出力する処理はどうでしょうか?

これはエラーになってしまいます。
関数内で定義した変数は関数外で呼び出すことができず、関数内だけの利用を認められています。
このことをローカルスコープといいます。
また、関数内で定義された変数のことをローカル変数というので覚えておきましょう。

関数内で定義した変数を関数外で利用するのがダメなら、関数外で定義した変数を関数内で利用するのはどうでしょうか?
コードを見て見ましょう。

<?php
$a = "グローバルスコープ";

function sample() {
  echo $a;
}

sample();

sample()は関数外で定義した$aを関数内で呼び出そうとしています。
一見、正常に処理されて「グローバルスコープ」と出力されそうですが、これはエラーになります。

関数外で定義した変数を関数内で利用するにはglobalキーワードが必要になります。

<?php
$a = "グローバルスコープ";
$b = "test";

function sample() {
  global $a;
  echo $a;
  echo $b;
}

sample();

globalキーワードを指定した$aは関数内で利用できるようになったので7行目の処理は正常に実行されます。
$bはglobalキーワードで指定されていないので8行目の処理はエラーになります。

このように関数外で定義した変数が関数内で利用できる変数の有効範囲のことをグローバルスコープといいます。
また、グローバルスコープな変数のことをグローバル変数と呼ぶので覚えておきましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

前の記事

3-6. 関数1(組込関数)

次の記事

SQL