Lesson 9
関数
Lesson 9
Chapter 1
関数概要
Lesson9では関数について学習していきます。関数はPHPが予め定義している他、自身で作成することも可能です。
関数とは
これまでも登場してきた関数ですが、一言で言うと処理をまとめたものになります。 そして関数を定義しておくことによって、必要に応じて処理を実行し値を取得することが可能となります。 関数は非常に重要なスキルとなる為、その認識で学習に取り組んでいきましょう。
関数の定義
function 関数(){
// 処理
}
関数の定義
以下構成でファイルを作成し、関数の定義を行ってみましょう。
XAMPP > htdocs > Lesson9 > index.php
index.php
<?php
function HelloMessage()
{
return "Hello World";
}
関数の定義は「function」を使用して定義を行います。これでHello Worldとテキストを出力する関数HelloMessageが完成しました。又、関数の最後には「()」を付けることがルールとなりますので忘れないようにしましょう。
関数の実行
関数の実行はこれまで変数をechoしてきたのと同様にechoで実行することが可能です。
index.php
<?php
function HelloMessage()
{
return "Hello World";
}
// 追加
echo HelloMessage();
実行した関数の確認
それではブラウザでどのように表示されているか確認して見ましょう。
出力結果
Hello World
HelloMessage関数内で定義している処理が実行されていることを確認できました。
関数を使用するメリット
メリット
- 定義しただけでは実行されない為、任意のタイミングで実行ができる。
- チームでの開発に適している。
- 機能のアップデートや追加、修正時の対応がしやすい。

Lesson 9
Chapter 2
変数スコープ
変数スコープとは
変数の使える範囲をスコープと呼びます。例えば関数の中と外で同じ名前の変数を定義したとしても使用できる範囲が異なる為、同じ名前ではあっても別の変数として認識されてしまいます。ここでは変数スコープについて学習していきましょう。
ローカル変数
下記の場合、ローカル変数とは関数内で定義した変数のことを指します。そしてローカル変数のスコープは定義されている関数内になります。
ローカル変数を呼び出してみる
index.php
<?php
function Local()
{
$local = "これはローカル変数";
return $local;
}
echo $local;
出力結果
Warning: Undefined variable $local in ...
$localは未定義の変数としてエラーが出力されました。これはスコープを超えて変数を呼び出したことが原因です。
正しいローカル変数の使い方
index.php
<?php
function Local()
{
$local = "これはローカル変数";
return $local;
}
echo Local();
出力結果
これはローカル変数
先ほどのように変数を呼び出すのではなく、関数を実行することで関数内の変数を呼び出すことに成功しました。このようにローカル変数とは使用できる範囲を持ちます。
グローバル変数
グローバル変数とは、使える範囲を気にすることなく使用できる変数のことを指します。又、グローバル変数は関数の外で定義した変数を関数の中でglobalを使い定義することが可能となります。
グローバル変数の定義
<?php
$変数;
function 関数(){
global $変数;
}
グローバル変数の定義
それでは上記を基にグローバル変数を定義して見ましょう。
index.php
<?php
$global = "これはグローバル変数";
function GlobalTest()
{
global $global;
return $global;
}
echo GlobalTest();
このように「global $global」でグローバル変数の定義を行います。
グローバル変数の動作確認
出力結果
これはグローバル変数
関数の外で定義している変数を関数の中で使用し、出力が可能となりました。グローバル変数の方が使い勝手はいいかもしれませんが、使用範囲が広いことで別の処理に影響を及ぼす可能性もあります。ローカル変数かグローバル変数か、しっかり理解と判断をした上で使用していきましょう。
まとめ
変数スコープのまとめ
- 変数スコープとは変数の使用できる範囲のことを言う。
- ローカル変数は決められた範囲内でしか使用することのできない変数のこと。
- グローバル変数は関数内外で使用できる変数のこと。

Lesson 9
Chapter 3
引数と戻り値
引数とは
引数(ひきすう)とは関数に送る情報や値のことを指します。
戻り値とは
戻り値とは関数の呼び出し元へ返す値のことを指します。
引数と戻り値
<?php
function 関数(引数)
{
return 戻り値;
}
引数と戻り値の基本動作
早速例文を使って確認してみましょう。
XAMPP > htdocs > Lesson9 > index.php
index.php
<?php
function HelloMessage($message)
{
return $message;
}
echo HelloMessage("こんにちは。");
以下が処理の流れになります。
- ①echo HelloMessageの引数に設定した「こんにちは。」の部分が関数に送られる。
- ②function HelloMessageの引数$messageで「こんにちは。」を受け取る。
- ③受け取った引数を返り値としてreturnする。
出力結果
こんにちは。
これが関数の引数と戻り値の基本動作になります。
様々な引数の操作方法
①複数の引数を設置する
引数は複数設定することも可能です。以下のように記述を書き換えてみましょう。
index.php
<?php
function NowWeather($weather, $temperature)
{
$message_1 = "現在の天気は" . $weather . "です。";
$message_2 = "気温は" . $temperature . "度あります。";
return $message_1 . $message_2;
}
// 追加
echo NowWeather("晴れ", "25");
出力結果
現在の天気は晴れです。気温は25度あります。
このようにすることで引数を複数送ることが可能となりました。又、関数での引数は左から順番に値が代入されていきます。「晴れ」と「25」を入れ替えた場合、$weatherに25、$temperatureに晴れと代入されてしまうので、順番にも注意が必要となります。
注意
送る値と設定している引数の数が一致していない場合エラーとなります。
例えば「晴れ」を消して「25」だけ設定する場合などです。その場合は$temperatureも削除してあげることで回避が可能なので、送る値の数と引数の数は一致させておくように注意しましょう。
②引数にデフォルト値を設定する
引数にはデフォルト値を設定することも可能です。上記の注意項目には送る値と引数の数を一致するようにと記述しましたが、デフォルト値の設定をしておくことで、一致しなかった場合のエラーも回避することができます。
デフォルト値の設定
<?php
function 関数名(引数, 引数 = デフォルト値)
{
// 処理
}
// 追加
echo 関数名();
それでは実際に例文を用いてデフォルト値の設定を行ってみます。今回は$oldのデフォルト値として「"不明"」を設定しました。
index.php
<?php
function Profile($name, $old = "不明"){
return "彼の名前は" . $name . "年齢は" . $old . "です。";
}
echo Profile("太郎", "20");
出力結果
彼の名前は太郎年齢は20です。
続いて関数に送る値と引数が一致しない状況を作ってみます。
index.php
<?php
function Profile($name, $old = "不明"){
return "彼の名前は" . $name . "年齢は" . $old . "です。";
}
echo Profile("太郎");
出力結果
彼の名前は太郎年齢は不明です。
デフォルト値を設定しておくことで、引数に代入される値がなかった場合はデフォルト値が値として引数に代入されます。実際のシステムでも必ずしも値が存在するとは限らないので、そのような状況でデフォルト値の設定を行います。
③引数の参照渡し
参照渡しを行うと関数内の処理で関数外の変数の値を操作することが可能です。変数の受け取り側が変数の参照を可能としていることから参照渡しと呼びます。
③-1 参照渡しを行わない場合の動作確認
index.php
<?php
function Eng($Eng){
return $Eng = "hello";
}
$Jpn = "こんにちは";
// 関数に$Jpnを送っている
echo Eng($Jpn);
echo "<br>";
// $Jpnをそのまま呼び出している
echo $Jpn;
出力結果
hello
こんにちは
これは先ほどまで学習してきた通常の動作となります。Eng関数は日本語を英語に変換しreturnする処理なので、Eng関数に渡している1行目の出力結果は「hello」となりました。echo $Jpnの部分は関数の外で定義している$Jpnをそのまま呼び出しているだけになるので、定義した状態の結果が出力されています。
③-2 参照渡しを行った場合の動作確認
それでは参照渡しを行い、変数を操作していきます。参照渡しの方法は引数の先頭に「&」をつけるのみです。
index.php
<?php
// &を追加
function Eng(&$Eng){
return $Eng = "hello";
}
$Jpn = "こんにちは";
// 関数に$Jpnを送っている
echo Eng($Jpn);
echo "<br>";
// $Jpnをそのまま呼び出している
echo $Jpn;
出力結果
hello
hello
このようにEng関数に送った$Jpnが関数内で「hello」と再定義されたことで、関数の外で定義されている変数$Jpnに変更が加わっていることがわかります。
まとめ
引数と戻り値のまとめ
- 呼び出す際に関数の()に設置した値を送ることができる。
- 引数は複数設定することができる。
- 引数の名前は任意だが、連想できる名前にすると良い。
- 引数への代入は左から順に行われる。
- returnに続いて記述した部分が返り値となる。

Lesson 9
Chapter 4
無名関数
無名関数とは
無名関数はその名の通り名前の存在しない関数のことを指し、クロージャとも呼ばれます。無名関数を使用するシーンとしては関数名の重複を防いだり、その場限りの関数として実行したい場合に使用されます。無名関数にも引数を渡せるので気軽に使える関数となります。
無名関数
<?php
$変数 = function(){
// 処理
};
$変数();
無名関数の定義
例文を使い、処理を確認してきます。無名関数なのでfunctionの後に記述していた関数名は不用となります。
XAMPP > htdocs > Lesson9 > index.php
index.php
<?php
$helloMessage = function () {
return "Hello World";
};
echo $helloMessage();
関数を変数に代入し、その変数をechoすることで関数を呼び出すことができます。先ほどとは少し記述も異なりますが、原理は同じです。
無名関数の動作を確認
ブラウザを確認して見ましょう。
出力結果
Hello World
このように無名関数に定義してあるHello Worldがreturnされブラウザへの出力が確認できました。
無名関数で引数の使用
続いては無名関数で引数を使用してみます。尚、使い方は通常の関数と同様です。
index.php
<?php
$helloMessage = function ($text) {
return $text;
};
echo $helloMessage("こんにちは");
出力結果
こんにちは
無名関数へ送った値がreturnされているのが確認できました。
まとめ
無名関数も通常の関数も手段の一つでしかありません。以下の要因を元に使い分けるケースがあるので無名関数についても把握しておきましょう。
- 関数の使用回数が1度のみ、又は極端に少ない場合。
- プロジェクトの規模次第で関数が増てしまうと混乱を招く場合。
無名関数のまとめ
- 無名関数とは名前のない関数のことを指す。
- 無名関数とはクロージャとも呼ばれる。
- 定義した関数を変数に代入し、その変数をechoすることで処理を実行することができる。

Lesson 9
Chapter 5
アロー関数
アロー関数とは
アロー関数も同じく無名関数に含まれます。chapter4で学習した無名関数との違いは、更に簡単に扱うことが可能になった点です。とはいえ、複雑な処理には向いておらず、シンプルな処理であれば効果を大きく発揮する関数の使用方法になります。
アロー関数
<?php
$変数 = fn () => 処理;
echo $変数();
アロー関数の定義
例文を使い、処理を確認してきます。
XAMPP > htdocs > Lesson9 > index.php
index.php
<?php
$helloMessage = fn () => "Hello World";
echo $helloMessage();
これまでの関数に比べ以下がアロー関数の記述で異なる点になります。
記述方法で異なる点
- 「function()」が「fn()」に省略。
- {}が不要。
- returnが不要。
アロー関数の動作確認
ブラウザの結果を確認して見ましょう。
出力結果
Hello World
このようにアロー関数に定義してあるHello Worldの出力が確認できました。処理の流れは以下になります。
①無名関数fn()はHello Worldを出力する処理。
②処理を変数$helloMessageに代入。
③変数$helloMessageをechoする。
アロー関数で引数を扱う
引数の扱いについてもこれまでと変わりありません。下記のようにすることで引数を扱うことが可能です。ちなみに下記は変数$xと$yの合計を出力するアロー関数になります。
index.php
<?php
$xy = fn ($x, $y) => $x + $y;
echo $xy(3, 5);
出力結果
8
$xと$yと合計が出力されていることが確認できました。
アロー関数で注意すべきエラー
これまでの記述に慣れてしまっている場合は以下のような記述をやりがちです。エラーとなる為、注意しておきましょう。
①returnを使用する。
当たり前のように関数では使用してきたreturnですが、アロー関数で使用するとエラーが発生します。
returnの使用
$helloMessage = fn() => return "こんにちは。";
出力結果
Parse error: syntax error, unexpected token "return" in ...
②{}を使用する。
こちらも当たり前のように関数では使用してきた括弧の部分ですが、アロー関数で使用するとエラーが発生します。
{}の使用
$helloMessage = fn() => {"こんにちは。"};
出力結果
Parse error: syntax error, unexpected token ...
③複数行で記述する。
1行で実行できる処理でない場合、エラーが発生します。
複数行の記述
$helloMessage = fn() => {
$message = "こんにちは。";
return $message;
};
出力結果
Parse error: syntax error, unexpected token ...
アロー関数はシンプルな処理であれば簡潔で見やすく利点を感じられる記述方法ではありますが、処理が複雑であったり、2行以上の処理になってしまう場合は使用ができないので注意しましょう。
まとめ
アロー関数のまとめ
- 処理を短くシンプルに実装できるようにした無名関数。
- 複雑な処理や2行以上の処理は使用できない。
- returnや{}の使用ができない。
