ユーザ定義関数
関数を定義する
- 組み込み関数とユーザ定義関数
-
特定のコードの流れ(文脈)に依存せず、複数の文脈で使い回せる一連の処理をパッケージングしたものが関数である。
PHPには一般性・汎用性が高く、PHPユーザが自由に使える関数が数多く用意されている(「組み込み関数」)。これまで使ってきたdate_default_timezone_set('Asia/Tokyo')やhtmlspecialchars(値, ENT_QUOTES)などはすべてこの組み込み関数である。
EXCELのSUM関数なども基本的には同じ意味のものである。
しかし最初から用意されている関数だけでなく、ユーザ側で関数を新たに定義し、使用することもできる。それをユーザ定義関数という。
- 関数の構成要素
-
※強調部がユーザ定義部分
変数のスコープ
- スコープとは
-
変数の「寿命」には限界がある。変数は自分が「生まれた」{}を超えては生きられない。
関数の処理内容を記述する{}の中ではじめて定義された変数を「ローカル変数」と呼ぶ。
関数の「引数」はローカル変数とは呼ばないが、ローカル変数と同じ扱いがされる({}の中で定義されたものとして扱われ、関数を超えては生きられない)。
- グローバル変数
-
関数の外で定義された変数を関数内でglobalキーワードを付けて使用するとその変数は「グローバル変数」として扱われる。
グローバル変数は{}の限界を超えて生き続けることができる。
globalキーワードを付けずに変数を使用すると関数内部で新たに定義された変数(ローカル変数)と見なされる。
関数の呼び出し
- 関数を利用する(呼び出す)
-
と書くだけで必要な処理が実行され、戻り値があればそれを値として利用できる(別の変数に代入、そのままprintなど)。
値渡しと参照渡し
- 値渡し
-
※func関数のローカル変数$var1は5になるが、func関数の引数として渡された$var1の値は変化しない。引数として渡されたのは$var1の中身(値)であって、変数そのものではない(「値渡し」)。
※変数そのものを渡す渡し方を「参照渡し」と呼ぶ(PHPでは「値渡し」が基本)。
- 参照渡し
-
※関数を定義するときに引数を「&」を付けておくと、その引数は「参照渡し」となる。
※参照渡しされた変数は関数内部での変更が関数外部にも及ぶ。
関数利用の一般的留意点
- グローバル変数・参照渡し
-
関数は特定の文脈から切り離されているが故に利用価値が高まる。しかしグローバル変数や参照渡しを用いるとその独立性が失われる。
従って関数を利用するに当たってはグローバル変数や参照渡しは極力使用しないのが望ましい。
- 別ファイルで関数を定義する
-
関数は特定のブログラム(ファイル)に依存する必要が無く、他のプログラム(ファイル)からも自由に呼び出せた方が利用価値が高まる。
そのため関数は別ファイルに定義して、それを他ファイルから適宜利用するのが一般的である。