【PHP講座】関数

女性

前回は制御構造について学びました。

【PHP講座】制御構造

2018.09.01

今回は関数についてです。



関数とは

関数とは、今までも使ってきた array関数や print_r関数などです。

ひとまとまりの処理を行ってくれる機能のことです。

関数は、パラメータ(引数)をいくつか渡して、内部で処理されて、結果として値を返してくれるというものです。

関数の呼び出し

関数名 (引数1,引数2,…);

引数が一つのときもありますし、全く必要ないときもあります。

関数は結果として値を返してくれるというのを先程書きました。

結果として値を返す場合、変数などに代入して利用します。

戻り値を変数に代入

変数1 = 関数名 (引数1,引数2,…);

これで戻り値が変数1に格納されます。

関数は値として記述できるところであれば書くことができます。

例えば。

echo date("Y-m-d");

と書くこともできます。

ちなみに date関数は、日付を文字列として取得する関数です。

引数によって表記方法が異なり、今回は “Y-m-d” という引数を与えています。

関数の定義

先程の date関数やarray関数は定義済みの関数です。

こういった関数のことを内部関数といいます。

いっぽうで関数は自分で作成することもできます。

それがユーザー定義関数です。

function 関数名(引数1,引数2,…)
{
	独自の処理
	return 戻り値;
}

引数はある場合とない場合があるかと思います。

また戻り値もない場合もあるかと思います。

そういった場合は、次のように書きましょう。

function 関数名()
{
	独自の処理
}

デフォルト引数

引数にはデフォルト値が設定できます。

function 関数名(引数 = デフォルト値)
{
	独自の処理
	return 戻り値;
}

呼び出しのときに関数名()と引数を省略した場合にデフォルト値が引数として使われます。



引数の渡し方

関数に引数を渡す方法は2種類あります。

  • 値渡し
  • 参照渡し

それでは順番に見ていきましょう。

値渡し

引数を値として渡して、関数内でその値を変更したとしても呼び出し元の変数の値に影響はありません。

function myFunc($a)
{
	$a = "田中";
}

$b = "山田";
echo "私は" . $b . "です。<br />";

myFunc($b);
echo "私は" . $b . "です。";

この場合は。

私は山田です。
私は山田です。

と表示されるわけです。

参照渡し

引数として渡された値を関数内で変更したときに呼び出し元の変数の値も変更するために使います。

&(アンパサンド)を引数の変数の前につけることで参照渡しになります。

function myFunc(&$a)
{
	$a = "田中";
}

$b = "山田";
echo "私は" . $b . "です。<br />";

myFunc($b); // 関数の引数が参照渡しのために $b の値が変更
echo "私は" . $b . "です。";

つまり。

私は山田です。
私は田中です。

という表示になります。

関数と間違えやすい言語構造について

今までつかってきた echo や print は関数ではありません。

言語構造というものです。

その証拠に引数を () で囲っていなかったはずです。

() でも動作するみたいなのですが。

正しい記述ではないので注意しましょう。

モジュール化

関数は特定の処理をまとめたものなので複数のスクリプトから利用したいということもあるでしょう。

その場合は、モジュール。

つまり、ひとまとまりの部品として独立させると良いです。

PHP にはファイルを独立させたスクリプトを読み込ませる命令があります。

  • include ‘ファイル(のパス)’
  • include_once ‘ファイル(のパス)’
  • require ‘ファイル(のパス)’
  • require_once ‘ファイル(のパス)’

ちなみに include の場合はエラーになったときに、その先の処理は継続して行われます。

それに対して require の場合はエラーになったときは、その先の処理は中止されます。

あと _once があるかないかは指定ファイルを何度も読み込むかどうかです。

通常は一度読み込めば問題ない場合が多いので _once を使うことが多いそうです。

最後に

いかがでしょうか。

ざっくりと関数について説明しました。

次回はPOSTとGETです。

【PHP講座】POSTとGET

2018.09.03

やっと、Webプログラミングらしくなってきました。

基礎的なところではありますが、気楽にやっていきましょう。