ホーム > PHPの文法 > 7 ユーザー定義関数 > PHP の関数 ( function ) について 【初心者向け】
PHPリファレンス

UPDATE:2024年11月12日

PHP の関数 ( function ) について 【初心者向け】

PHP の関数 ( function ) について 【初心者向け】 | wepicks!
PHP4.1以上 PHP5 PHP7 PHP8

プログラムを記述していると、例えば、メールの送信やファイルアップロードなど様々な場所で使用する処理がでてきます。このような頻繁に使用する処理一つにまとめて何時でも呼び出せるようにするのが 関数 です。同じコードを何度も記述するような無駄を整理してくれます。本ページでは、関数 の基本的なことから引数返り値可変関数スコープについてなど、基礎から幅広く紹介しています!プログラミングで関数の作成は必要不可欠です。昨今注目のオブジェクト指向プログラミングを身に着ける上でも 関数 の知識は必要です。基本を覚えてオリジナル関数をバシバシ作ってしまいましょう!

初心者の方は以下の4項目を優先的に読んでみて下さい。


関数とは

POINT

  • 関数処理をまとめて名前を付けたもの
  • 関数 を呼び出すだけで、必要な 結果 を簡単に得ることが出来る

関数 とは処理をまとめて名前を付けたものだと考えて下さい。

ある 結果 を得るために処理をまとめて関数として定義しておき、その 値 や 結果 が欲しいときは、関数を呼び出す(コール)だけで、必要な 値 や 結果 を容易に得ることができるようになります。つまり関数は非常に便利なものなのです。
例えば、ある関数を呼び出すだけで本日の曜日を得ることが出来ます。言い換えれば、本日の曜日を得るために一々コードを記述しなくても関数を呼び出すだけで曜日を取得することが出来ます。

例 本日の曜日を得る

結果は

Sat

となります。

また、関数へは 値 を渡すことが可能で、その 値 を元に処理が実行されることで、渡した値に応じた 値 や 結果 を取得することができます。例えば、ある日付を関数に渡すとその日付の曜日が得られる、或いは、ある文字列を関数に渡すと文字列のバイト数(長さ)が得らるなど、渡した 値 に応じた 結果 を取得することが出来ます。これは、状況に応じて取得する 値 や 結果 を動的に変えられる非常に便利な機能です。

例 日付を指定して曜日を得る

結果は

Wed

となります。

プログラムを記述すると、何度も色々な箇所で使用する同じようなコードで得る 値 があると思います。さらに、その 値 や 結果 を取得するためには、とても長いコードを記述しなければならない場合もあるでしょう。このような場合は関数としてコードを纏める必要があります。そうでないと、何度も同じコードを色々な箇所に記述することになってしまいます。これでは効率が悪く、作業時間が長くなってしまいますし、コードの修正や変更などに対してのメンテナンス性も悪くなってしまいます。

関数は便利であり、必要なものなので、しっかり覚えて利用しましょう!


関数の種類

POINT

  • PHPの関数は2種類組み込み関数(予め定義されている)とユーザー定義関数(新規に定義する)

関数にはPHPで予め用意されている組み込み関数と、ユーザーが自分で作成するユーザー定義関数があります。

組み込み関数はPHP側で予め用意されていて、関数を呼び出すだけでいつでも使用出来ます。PHPの組み込み関数は、便利な関数が多く用意されているので、自分で関数を作る(ユーザー定義関数)前に、必要とされる処理を行ってくれる組み込み関数があるかどうかを調べてみましょう。PHPマニュアルの関数リファレンス

ユーザー定義関数はコードを記述しているユーザー自身で定義することが出来る関数です。スクリプト中で何度も使用するようなコードなどを関数化します。関数を定義するのは少し面倒かもしれませんが、コードの使用頻度が高ければその恩恵は計り知れません。スクリプト中何度か使用するようなコードであれば関数化しておくと良いでしょう

組み込み関数もユーザー定義関数も同じ関数形式であり予め用意されているか、新規に定義するか、の違いです。

この頁ではユーザー定義関数の説明を進めます。


基本的な関数を作ってみる

POINT

  • 関数の構文は
    [変数 = ] function [&]関数名([引数,,,,,,]){
    	処理
    	[return文]
    }
    //[ ]は省略可能
    

    ※「[ ]」は省略可能です。

構文を見ただけでは、良く分からないと思いますので、実際に簡単な関数を作ってみて、徐々に理解を深めてみましょう。


簡単な関数を作る

POINT

  • 引数(パラメータ)やreturn文省略して関数を定義できる

早速簡単な関数を作ってみましょう。
以下の例は最小限の記述で定義した非常にシンプルな関数です。これは、引数(パラメータ)の指定や返り値の指定がない場合の関数です。引数(パラメータ)や返り値については以下の各項目で詳しく説明しますので今は無視して下さい。関数を先に定義してから関数を呼び出します

結果は

Hello World!!

となります。

関数を定義するには、最初に「function」というキーワードを記述します。キーワードの後に半角スペースを挿入し、其の後「関数名」を記述します。関数名には自分で任意の名前を付与します。例では「echo_hello」が関数名になります。関数名の後に「( )」丸括弧を連続して記述します。更に「{ }」中括弧を記述して其の中に処理を記述します。例の処理は「echo "Hello World!!<br>\n";」の部分です。

//シンプルな関数の定義
function 関数名(){
	処理
}

関数名の記述にはルールがありますので、下記の「関数名のルール」で詳しく説明します。

これで関数が定義できました。次に関数を呼び出します。関数を呼び出すには関数名を記述して、関数名の後に「( )」丸括弧を連続して記述します。例では「echo_hello();」で関数を呼び出しています。呼び出しが成功して初めて 結果 を得ることが出来ます。

//関数の呼び出し
関数名();

関数を作る場合、関数名でその処理内容をイメージできるようにすると良いと言われます。関数には明確な処理内容を定義して、「この関数を使用すれば、このような結果が得られる」ということが明確になるとよいでしょう。


引数(パラメータ)を指定する

POINT

  • 引数(パラメータ)とは関数内部の処理へ渡す値のこと

それでは次ぎに引数(パラメータ)を指定した関数を定義してみましょう。引数(パラメータ)とは、関数内部の処理へ渡す 値 のことです。関数処理の材料のような働きをします。引数(パラメータ)を指定することで、関数内部へ値を渡すことができ、渡した値に応じた結果を取得することが出来ます。

引数を指定する場合は以下のように記述します。

//関数の定義
function 関数名(引数の変数){//引数を変数で指定
	処理
}
//関数の呼び出し
関数名(引数の値);//引数の値を指定

早速、引数(パラメータ)を指定した簡単な関数を定義してみます。

結果は

おはよう!
こんにちは!
こんばんは!

となります。

まず関数定義時の引数の指定方法を説明します。引数は関数名の後の「( )」丸括弧の中に記述し、 変数 で指定します。

function echo_greeting($greeting)・・・

この場合、変数 $greeting引数 となります。
引数として指定した変数は関数内部の処理で使用されます。

・・・{
	echo $greeting;
}

このように引数として渡された変数 $greeting が内部の処理で使用されています。

次に、関数呼び出し時の引数の指定方法です。関数を呼び出す時、関数名の後の「( )」丸括弧の中に実際の引数の値を記述します。この値が引数の値として関数内部へ渡されて処理されます。

echo_greeting('おはよう!');

おはよう」の文字列引数の 値 になります。この文字列の値は関数定義時の引数として指定した変数 $greeting へ渡され、関数内部の処理 echo $greeting."<br>\n"; で使用されます。
順番としては、
1

echo_greeting('おはよう!');


2

//おはよう → ($greeting)
function echo_greeting($greeting)・・・


3

//($greeting) → echo $greeting
・・・{
	echo $greeting."<br>\n";
}

という感じです。

そして、引数の値に応じて取得する値も変化するので

の処理結果は、

おはよう!

となり、

の処理結果は、

こんにちは!

となります。

また、引数は「,(カンマ)」で区切って複数指定できるなどの使用方法があります。詳細は以下の「関数の引数(パラメータ)」の項目で説明します。


return文で返り値を指定する

POINT

  • 関数から値を取得することが出来る。これを返り値という。
  • 関数から返り値を得る場合はretrun文を使用する
  • return文が実行されると関数の処理がその時点で終了して値が返される

では次に、関数から値を取得する定義方法を説明します。引数(パラメータ)では関数へ値を渡しますが、逆に関数から値を取得することが出来ます。この値を関数の返り値と言います。返り値を得るには、関数内部の処理でreturn文を使用します。これまでの例では、関数内部で結果自体も表現していますが、内部処理中にreturn文を記述すると、「return文が実行されると同時にreturn文で指定した値が関数の返り値として出力」されます。さらに、「return文が実行された時点で処理が終了し、以降の処理は中止」されます。また、return文では、配列やオブジェクトを含むあらゆるデータ型を指定できます。return文の詳細はこちらを参照下さい。

return文を指定する関数は以下のように記述します。

返り値 = function 関数名([引数,,]){
	処理
	return 返り値
}

では返り値を得る簡単な関数を定義してみます。

結果は

Hello World!!
Hello World!!

となります。

例では、関数定義の処理中に「return $string;」でreturn文を記述しています。return文ではあらゆるデータ型を指定出来ますが、この場合は、文字列型の変数が指定されています。

return文で指定された内容は関数が呼び出された場合に、返り値として出力されます。また、return文が実行されると、関数の処理はそこで終了して以降の処理は実行しません

次に、関数を呼び出します。例の関数定義のreturn文で指定した内容は「return $string;」で、変数「$string」には、「$string = "Hello World!!<br>\n";」と文字列が格納されています。つまり、関数「hello_return()」を呼び出した時に得られる返り値は、「"Hello World!!<br>\n";」の文字列になります。従って、

のように、echo で返り値である文字列を出力したり、

返り値の文字列を変数に格納してその変数を echo するなどして値を出力することが出来ます。

返り値は複数の値を指定できるなどの用法があります。詳細は「関数返り値」の項目で説明します。


関数名のルール

POINT

  • 関数名は関数に付ける任意の名前
  • 関数名では大文字小文字は区別されない
  • 1文字目使用できる文字
    [ a ~ z ]
    [ A ~ Z ]
    [ Ox7F ~ 0xFF ] コードを持つ文字
    [ _ ] アンダーバー
  • 2文字目以降
    [ 0 ~ 9 ]数字が上記に加わる
  • 一度定義されている関数名は使用できない

  • 関数名は識別子です。識別子は名前のことです。識別子の詳細についてはこちらを参照下さい。
  • 関数名では大文字小文字は区別されません
  • 最初の1文字目として使用できるのは、「アルファベットの大文字と小文字」、「アンダースコア( _ )」、「ASCIIコードで、( 0x7F )から( 0xFF )までの文字」のいずれかのみとなります。0x7F~0xFF(ASCIIコード)を使用することで、日本語の関数名も付けることが出来ます。ひらがな、カタカナ、漢字などです。アルファベットは大文字小文字が区別されません。
  • 2番目以降には、1文字目で使用できる文字に加えて「数字」も使用できます。
  • 一度定義されている関数名は使用できません。使用した場合エラーが発生しPHPの処理が停止します。


関数の引数(パラメータ)

POINT

  • 引数(パラメータ)とは関数内部の処理へ渡す値のこと
  • 関数内部へ 引数 を渡し、それに応じた 結果得ることが出来る
  • 引数には任意の式を指定できる
  • 引数は「,(カンマ)」で区切って複数指定できる
  • 引数は省略できる
  • 引数では、値渡し参照渡しデフォルト引数値可変長引数 がサポートされている

ここでは、引数を指定する関数定義の詳しい用法について説明したいと思います。基本的な用法については、「引数(パラメータ)を指定する」で説明していますので、読んでない方は最初にこちらを確認してください。

引数(パラメータ)とは、関数に渡すのことです。関数定義の処理で使用する値のことで、関数の材料のようなものです。例えば、ある工場に様々な資材を搬入して生産された車が出てくるとします。この場合、工場が関数資材が引数です。

引数には任意の式を指定できます。式とは値のあるもののことで、変数、定数、リテラル値、演算子を使用した複雑な式、などです。式についてはこちらを参照下さい。

式は「,(カンマ)」で区切って複数指定することが出来ます。式が評価されその結果が関数に渡されます。

引数は省略可能で、指定しない場合は括弧の中を空白「( )」にしておきます。

引数には幾つか種類があります。デフォルトでは「値渡し」となります。値渡しでは引数にを指定します。次に「参照渡し」の引数です。この形で引数を指定すると、関数内部から関数外部の変数の値を直接操作できます。「値渡し」の引数では関数外部の変数に影響を与えることはありません。PHPでは、「デフォルト引数値」をサポートしています。デフォルト引数値を指定すると関数を呼び出す場合に引数を指定しなくても、自動でデフォルト値の引数が指定されます。最後に、「可変長」の引数です。これは、引数の数を可変させることが出来る機能です。ざっと説明しましたが各引数の種類について以下で詳しく説明します。


「値渡し」の引数

値渡し」の引数では、引数にはを指定します。変数、定数、リテラル値、演算子を使用した複雑な式などが指定出来ます。式は「,(カンマ)」で区切って複数指定することが出来ます。式が評価されその結果が関数に渡されます。引数を指定しない場合は括弧の中を空白「( )」にしておきます。

引数なしの関数

括弧の中を空白「()」にしておきます。

結果は

"Hello World !!"

となります。

引数に 変数 を指定

関数 hello_name() の引数に変数$nameを指定しています。変数$nameには文字列を指定しています。

結果は

こんにちは ” 山田 ” さん。

となります。

引数に 演算子を使用した式 を指定

関数 int_twice() の引数に変数$intを指定しています。変数$intには「+(加算演算子)」を使用した式を指定しています。

結果は

100

となります。

引数に 配列 を指定

関数 array_diplay() の引数に配列型の変数$abcを指定しています。

結果は



となります。

引数を複数指定

関数 echo_plural_value() の引数に複数の変数を指定しています。引数の値は文字列です。

結果は

PHP
Ruby
Perl

となります。

引数に様々な値を複数指定

関数 echo_various_value() の引数にリテラル値、数式、論理値、変数、定数などの値を複数指定しています。

結果は

PHP
123
1000
TRUEです
変数
定数

となります。


「参照渡し」の引数

POINT

  • 引数を参照渡しで指定すると、関数内部から関数外部の変数の値を直接操作できる
  • 引数を参照渡しにするには引数の前に「&(アンド)」をつける

引数を参照渡しで指定すると、関数内部から関数外部の変数の値を直接操作できるようになります。通常変数のスコープの規定により「値渡し」の引数では、関数内部から関数外部の変数の値は操作できません。

引数を参照渡しにするには引数の前に「&(アンド)」を付けます。

function 関数名( &引数 ){
	処理
}

例:参照渡しの場合

[/PHP]

結果は

25

となります。

通常の値渡しの場合「function int_double ( $int )・・・」であれば、
結果は

5

となります。


引数のデフォルト値

POINT

  • 引数に値を指定しなかった場合は常にデフォルト値を使用することができる
  • デフォルト値の指定はデフォルト値がない引数の右側に指定する必要がある

関数を呼び出す(コール)とき、引数に値を指定しなかった場合は常にデフォルト値を使用するということが出来ます。引数に値を指定した場合はその値が使用されます。
デフォルト値は定数式である必要があります。例えば、変数やクラスのメンバーではエラーが発生します。

引数に値を指定しないで関数を呼び出すとデフォルト値が適用されます。

結果は

入場料金は 1000 円です。

となります。

引数に値を指定するとその値が適用されます。

結果は

入場料金は 1200 円です。

となります。

引数を複数指定いる場合にデフォルト値を指定するには、デフォルト値の指定をデフォルト値がない引数の右側に指定する必要があります。
以下の例では期待通りに動作しません。

結果は

氏名:39 , 年齢: , 性別:鈴木

となります

以下のようにデフォルト値の指定を右側に配置すると正常に動作します。

結果は

氏名:鈴木 , 年齢:39 , 性別:男性

となります


可変長の引数

POINT

  • 可変長の引数では、引数の数を可変させることが出来る
  • 可変長の引数を指定するには、PHPの組み込み関数「func_num_args() func_get_arg() func_get_args()」を使用する

可変長の引数では、引数の数を可変させることが出来ます。上記で説明してきましたが、引数は0個で省略することができ、また「,(カンマ)」で区切って複数指定することも出来ます。そしてさらに引数の数を可変させることが出来ます。引数が1個の場合もあり、5個の場合もある、という具合です。

引数を可変させる場合はPHPの組み込み関数(PHPで予め用意されている関数)を使用します。以下の組み込み関数を利用して可変引数に対応したユーザー定義関数を作成することが出来ます。

これらの関数はユーザー定義関数の内部処理で使用します。そうでないとPHPからエラー警告が出ます。

<?php
function 関数名(){
	処理
	$count = func_num_args();
	$ary = func_get_arg();
	$ary = func_get_args();
}
?>

それでは、それぞれの関数の動作を見てみましょう。

func_num_args()

この関数は、ユーザー定義関数内部で使用し、ユーザー定義関数の引数の個数を整数値で返します

結果は

0
3

となります。
引数(パラメーター)が空の場合は、0 を返し、3個の場合は、 3 を返しています。

func_get_args()

この関数は、ユーザー定義関数内部で使用し、関数の全引数を配列として返します

結果は

Array ( )
Array ( [0] => a [1] => b [2] => c )

となります。

func_get_arg()

この関数は、ユーザー定義関数内部で使用し、関数の指定して引数の値を返します

結果は


c

となります。

return func_get_arg(2); が return func_get_arg(0); であれば、

結果は


a

となります。

これらの関数を利用して引数可変対応のユーザー定義関数を作成してみる。

結果は

”こんにちは! 名無しさん”
”こんにちは! 青木さん”
”こんにちは! 伊藤さん”
”こんにちは! 遠藤さん”

となります。


引数の省略

 引数を省略して関数を呼び出すことが出来ます。ですが、引数が未設定のまま処理が進められるとPHPより警告が発生します。

結果は

引数 a は設定されています。

となります。

2つ目の引数が指定されていないので、PHPから警告が発生しています。

PHP Warning: Missing argument 2 for param_two(), called in /path/filename.php on line **


返り値

POINT

  • 関数ではreturn文値を返すことが出来る、これを返り値という
  • 返り値はすべてのデータ型を扱える
  • return文が実行されると其の時点で関数の処理が終了する
  • return文は複数指定可能
  • return文は省略しても大丈夫
  • 返り値がない場合は関数内部の処理で出力する

関数はreturn文で値を返すことが出来ます。関数を実行したときに得られる値のことです。これを返り値といいます。基本的な用法については、「return文で返り値を指定する」で説明していますので、最初にこちらを読んでから引き続きこの項を読んでください。

返り値を求める関数定義の構文

返り値 = function 関数名([引数,,]){
	処理
	return 返り値
}

return文の返り値は、文字列、数値、浮動小数点数、論理値、配列、オブジェクトなど、すべてのデータ型を扱うことが出来ます。return文が実行されると、其の時点で関数の処理が終了し、その関数を呼び出した箇所に制御が戻ります。関数からの返り値は、変数などに格納して利用すると便利です。return文はオプション機能なので省略しても大丈夫です。返り値がない場合は、関数内部の処理で出力処理を記述します。また、return文で複数の値を返すには、return文に配列を指定します。


return文で値を返す

結果は

Hello!!
100

となります。


return文で複数の値を返す1

return文で複数の値を返すには、return文に配列を指定します。

結果は

返り値を変数に格納して配列型変数を展開
10
20
30
40
50
list関数を利用して複数の返り値をそれぞれ変数に格納する
10
20
30
40
50

となります。

return文に配列を指定しているので、複数の返り値は配列型データとして返されます。返り値は変数などに格納し、配列展開することで値を取得できます。また、list()関数を利用することで、配列の値をそれぞれ指定した変数へ格納して利用することが出来ます。


return文で複数の値を返す2

 return文の返り値を配列にして、論理値と文字列を返します。return文が実行されると関数の処理はそこで終了して、制御が関数を呼び出した箇所に戻ります。

結果は

adminuserです。
testuserを識別できません。

となります。


可変関数

POINT

  • 関数名を変数で指定することが出来る

ユーザー定義関数では、関数名を変数で指定することが出来ます。これを可変関数と言います。

結果は

おはよう!

となります。

例では、if文によって条件を分岐し、時間帯により実行する関数名を変更しています。午前4~11時までは、文字列「greet_morning」を変数「$varFunctionName」に格納し、午前11~16時までは、文字列「greet_afternoon」を変数「$varFunctionName」に格納、それ以外は、文字列「greet_evening」を変数「$varFunctionName」に格納しています。この変数「$varFunctionName」を関数名に指定し、関数を呼び出すことで、時間帯によって実行する関数を変更することが出来ます。

このように可変関数では、関数名を変数で指定できるので、変数名によって呼び出す関数を動的に変更することが可能です。


関数と変数のスコープ

POINT

  • 変数の影響範囲を変数のスコープといい、関数の内部外部で分けることが出来る
  • 変数のスコープは4種類、「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数(パラメータ)」がある

変数のスコープとは宣言された変数がコード中の何処まで影響を及ぼすかという範囲のことです。一度宣言された変数が何処でも使用できるという訳ではありません。変数が宣言された場所とその変数の有効範囲が決められており、それが変数のスコープです。変数のスコープは全部で4種類あります。「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数(パラメータ)」です。これらの変数のスコープ、宣言の場所と有効範囲は関数内部か関数外部で分けることができます。「グローバルスコープ」は関数の外部で宣言された変数のスコープです。「ローカルスコープ」と「スタティック変数」は関数の内部で宣言された変数のスコープです。そして、「関数の引数」として宣言された変数のスコープがあります。以下でそれぞれの詳細を説明します。


グローバルスコープ

POINT

  • 関数の外部で定義した変数グローバルスコープグローバル変数
  • 関数の内部からグローバル変数にはアクセスできない
  • 関数の内部からグローバル変数にアクセスする場合は、globalキーワードを使用する

関数の外部で定義した変数は、グローバル変数となります。グローバルスコープのグローバル変数です。この変数はコード中のどこからでもアクセスできます。ですが、関数の内部からグローバル変数にアクセスすることはできません。関数の内部からグローバル変数にアクセスするには、関数内でglobalキーワードを使用してその変数を宣言する必要があります。

以下の例では、関数外部で「$iCount = 1;」と変数(グローバル変数)を宣言しています。そして、関数内部で、「$iCount++;」とし、変数「$iCount」に対して加算子で加算しています。ですが、関数内部から関数外部の変数へはアクセスできないので、echoの結果は「1」となります。

結果は

1

となります。

そこで、globalキーワードを使用して関数内部で変数を宣言します「global $iCount;」。そうすると、関数内部から外部の変数(グローバル変数)へアクセスできるので、関数外部で宣言された「$iCount = 1;」に対して関数内部の「$iCount++;」が有効となり、結果は「2」となります。

結果は

2

となります。


グローバル変数とは別にスーパーグローバル変数があります。スーパーグローバル変数は関数やメソッドの内部で使用する場合、globalキーワードを使用して宣言する必要がありません。グローバル変数とは異なります。こちらを参照下さい。


ローカルスコープ

POINT

  • 関数の内部で定義した変数ローカルコープローカル変数(関数内で定義した別の関数も含む)
  • 関数の外部からローカル変数にはアクセス出来ない

関数の内部で宣言した変数は、宣言した関数内でのみ有効になります。これは、ローカルスコープのローカル変数です。関数内で定義した別の関数も含みます。このローカル変数へは、関数の外部からアクセスすることはできません

結果は

1

となります。

例では、関数内部の変数 $iCount(ローカル変数) を加算しても、関数外部の変数 $iCount(グローバル変数) には影響がありません。


スタティック変数

POINT

  • 関数の内部でstaticキーワードを使用して定義した変数はスタティック変数
  • スタティック変数は関数内でしか使用できない
  • スタティック変数は関数が終了しても破棄されない

関数の内部でstaticキーワードを使用して宣言する変数をスタティック変数と言います。スタティック変数の値は関数が終了しても破棄されませんが、その関数内でしか使用できません。スタティック変数を宣言するには、キーワードstaticを使用します。

結果は

スタティック変数カウンタの現在の値は 1 です。
スタティック変数カウンタの現在の値は 2 です。
スタティック変数カウンタの現在の値は 3 です。
グローバル変数カウンタの値は10です。

となります。


関数の引数(パラメータ)

POINT

  • 関数の引数としての変数のスコープ関数内部で有効なローカルスコープ
  • 参照渡しの引数の場合、関数内部から関数外部の変数へアクセスできる

関数の定義時に、関数の引数(パラメータ)として変数を指定することができます。引数とは関数の内部へ渡すデータのことです。この関数の引数としての変数のスコープは、関数内部で有効なローカルスコープです。関数外部の変数には影響を与えません。ですが、引数を指定する場合に、参照渡しという用法で指定することが可能で、この場合、関数外部の変数の値を操作することが出来ます。

詳細は上記の関数の引数(パラメータ)を参照下さい。

以下の例では、関数外部で「$choise = ‘train’;」とグローバル変数を定義し、関数の引数として「means_transportation($choise)」と引数の変数を指定しています。引数の変数$choiseは、グローバル変数の$choiseに影響を与えません。

結果は

I go by ,airplane
train

となります。

以下の例では参照渡しで引数の変数を指定しています。この場合関数内部から関数外部の変数を操作することが出来ます。

結果は

I go by ,train and airplane
train and airplane

となります。


関数の入れ子(ネスト)

POINT

  • 関数は入れ子(ネスト)に出来る

関数は関数の中に関数を記述する入れ子(ネスト)が可能です。
以下の例では、関数 func_calculate() の中に function func_addition() と func_subtraction() の二つの関数を入れ子にして記述しています。

結果は

加算:74
減算:28

となります。


関数内のHTML処理

POINT

  • 関数は処理にHTMLを記述出来る

関数は処理にHTMLを記述出来ます。とても便利な機能なので、利用してみましょう。

結果は

となります。


型宣言(タイプヒンティング)

タイプヒンティング とは、関数の宣言時、関数が受け取る引数の型を指定して、指定型以外のデータが渡された場合にエラーが発生する機能です。
指定できる型は、文字列型、整数型、浮動小数点数型、配列型、論理型、Callable(コールバック)、クラス、インターフェースです。引数の前に型指定のキーワード や クラス名/インターフェース名 を指定します。

実行結果
こんにちは!

となります。
引数に配列型を指定している方ではPHP Fatal error:が発生します。

キーワード内容バージョン
string文字列型引数は文字列型(string)を指定PHP7.0.0
int整数型引数は整数型(integer)を指定PHP7.0.0
float浮動小数点型引数は浮動小数点型(float)を指定PHP7.0.0
float論理型引数は論理型(boolean)を指定PHP7.0.0
array配列型引数は配列型(array)を指定PHP5.1.0
クラス名/
インターフェース名
オブジェクト型引数は指定してクラスやインターフェースのインスタンスPHP5.0.0
callablecallable引数はcallableを指定PHP5.4.0


関数 簡単まとめ

1 Minute Note

関数とは

  • 関数処理をまとめて名前を付けたもの
  • 関数を呼び出すだけで、必要な 結果 を簡単に得ることが出来る
  • PHPの関数は2種類組み込み関数(予め定義されている)とユーザー定義関数(新規に定義する)
  • 関数の構文は
    [変数 = ] function [&]関数名([引数,,,,,,]){
    	処理
    	[return文]
    }
    //[ ]は省略可能

関数名 規則

  • 関数名は関数に付ける任意の名前
  • 関数名では大文字小文字は区別されない
  • 1文字目使用できる文字
    [ a ~ z ]
    [ A ~ Z ]
    [ Ox7F ~ 0xFF ] コードを持つ文字
    [ _ ] アンダーバー
  • 2文字目以降
    [ 0 ~ 9 ]数字が上記に加わる
  • 一度定義されている関数名は使用できない

引数

  • 引数(パラメータ)とは関数内部の処理へ渡す値のこと
  • 関数内部へ 引数 を渡し、それに応じた 結果得ることが出来る
  • 引数には任意の式を指定できる
  • 引数は「,(カンマ)」で区切って複数指定できる
  • 引数は省略できる
  • 引数では、値渡し参照渡しデフォルト引数値可変長引数 がサポートされている
  • 引数を参照渡しで指定すると、関数内部から関数外部の変数の値を直接操作できる
  • 引数を参照渡しにするには引数の前に「&(アンド)」をつける
  • 引数に値を指定しなかった場合は常にデフォルト値を使用することができる
  • デフォルト値の指定はデフォルト値がない引数の右側に指定する必要がある
  • 可変長の引数では、引数の数を可変させることが出来る
  • 可変長の引数を指定するには、PHPの組み込み関数「func_num_args() func_get_arg() func_get_args()」を使用する

返り値

  • 関数ではreturn文値を返すことが出来る、これを返り値という
  • 返り値はすべてのデータ型を扱える
  • return文が実行されると其の時点で関数の処理が終了する
  • return文は複数指定可能
  • return文は省略しても大丈夫
  • 返り値がない場合は関数内部の処理で出力する

可変関数

  • 関数名を変数で指定することが出来る

関数と変数のスコープ

  • 変数の影響範囲を変数のスコープといい、関数の内部外部で分けることが出来る
  • 変数のスコープは4種類、「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数(パラメータ)」がある
  • 関数の外部で定義した変数グローバルスコープグローバル変数
  • 関数の内部からグローバル変数にはアクセスできない
  • 関数の内部からグローバル変数にアクセスする場合は、globalキーワードを使用する
  • 関数の内部で定義した変数ローカルコープローカル変数(関数内で定義した別の関数も含む)
  • 関数の外部からローカル変数にはアクセス出来ない
  • 関数の内部でstaticキーワードを使用して定義した変数はスタティック変数
  • スタティック変数は関数内でしか使用できない
  • スタティック変数は関数が終了しても破棄されない
  • 関数の引数としての変数のスコープ関数内部で有効なローカルスコープ
  • 参照渡しの引数の場合、関数内部から関数外部の変数へアクセスできる

その他

  • 関数は入れ子(ネスト)に出来る
  • 関数は処理にHTMLを記述出来る


サンプル

– サンプル Click Here ! –

実行結果
簡単な関数の作成と実行
Hello World!!

簡単な関数の作成と実行 return文
Hello World!!
Hello World!!

関数の引数を指定
おはよう!
こんにちは!
こんばんは!

関数の引数に配列を指定


関数の引数を参照渡しで指定
25

関数の引数をデフォルト値で指定
入場料金は 1000 円です。

関数の引数を可変長の引数で指定
”こんにちは! 名無しさん”
”こんにちは! 青木さん”
”こんにちは! 伊藤さん”
”こんにちは! 遠藤さん”

関数の返り値をreturn文で複数指定
返り値を変数に格納して配列型変数を展開
10
20
30
40
50
list関数を利用して複数の返り値をそれぞれ変数に格納する
10
20
30
40
50

可変関数を作成
こんばんは!

関数の入れ子
加算:74
減算:28

– サンプル Click Here ! –


タグ(=記事関連ワード)

日付

公開日:2017年3月25日
最終更新日:2024年11月12日

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

https://wepicks.net/phpref-functions_userdefined/trackback/

page top