PHPの関数
関数とは、命令するとひとまとまりの処理を行ってくれる機能です。これはPHPだけでなくどの言語でも同様の考え方です。
関数に処理を命令する際に値を与えるとその値に対して処理を実行しその結果を返します。中学校数学の教科書にも出てくる正比例や反比例も関数で「y=ax」とかで表記されます(関数xに値を与えると結果が決まりましたよね)。
PHPで関数を実行
関数を実行するには、関数を定義する必要があります。関数の記述にはルールがあって以下の記述に従ってください。関数名は自分の好きな名前を付けることが出来ます(英数字とアンダースコアが一般的で最初の文字に数字を使えません)。
では文字列を画面表示する簡単な関数を定義してみます。
1 2 3 4 5 6 |
function showStr(){ $str = "私は、原人です"; header("Content-type: text/html; charset=utf-8"); echo $str; } |
関数は定義したら、呼び出さないと実行されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php //関数の定義 function showStr(){ $str = "私は、原人です"; header("Content-type: text/html; charset=utf-8"); echo $str; } //関数の呼び出し showStr(); ?> |
実際はもっと複雑な処理を記述します。
関数定義するメリットは、プログラムの中で同じような手続きや処理を何度も実行する場合に関数を呼び出すだけでその処理をやってくれるのでとても便利なのです。
引数と戻り値がある関数
冒頭で説明したように関数には値を与えて処理結果の値を受け取ることが出来ます。関数に与える値のことを「引数(ひきすう)」と言い処理結果の値を「戻り値」と言います。
※関数を呼び出す側では実際の値を引数として渡すので実引数といい定義された関数側受け取る引数を仮引数とも呼びます。
実際は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php function sumValue($ten){ $val = 0; foreach($ten as $t){ $val = $val + $t; } return $val; } $test = array(80,78,67,55,90); $value = sumValue($test); header("Content-type: text/html; charset=utf-8"); echo "合計点数は、".$value."点です" ?> |
上記のプログラムは、関数「sumValue」を呼び出し引数には5教科の点数を配列で渡してます。関数は、渡された引数を加算して合計得点を算出し結果を戻してます。
PHPの標準組込関数とユーザー定義関数
例で記述してようにユーザーが自身で定義した関数をユーザー定義関数と言います。PHPには、様々な関数がライブラリとして標準で組み込まれてます。
あまりにも多くの関数があるのでここで全ては説明できません。必要に応じてgoogle先生に聞いてみてください(PHPと実現したい内容で検索するとヒットすると思います)。
PHP 変数のスコープ
変数のスコープとは、変数の生存できる範囲(有効範囲)のことで変数を宣言したらどこでも使用できるわけはありません(どこでも使用できると引数や戻り値は必要なくなります)。
ローカル変数
変数を宣言するとローカル変数として扱われます。ローカル変数は、違う領域間を行き来できません。だから関数には引数として値を渡してその引数から戻り値をもらいます。
関数の中で宣言した変数は、関数の外では扱えませんし、逆に関数の外で宣言した変数も関数の中では使えません(関数と中と外で同じ変数を宣言しても別物として扱われます)。
これは関数の独立性を保つためにはとても重要なことなになります。関数を作る時に外側でどのような変数が使われてようと全く影響を受けないので安全に処理ができます。
グローバル変数
グローバル領域で宣言された変数を関数の中で使うための方法も用意されており関数内で「global」と宣言するだけで使用できるようになります。
だからといってやたらと「global」を使うのはやめましょう。バグの温床としないためにもできるだけローカル変数のみで記述しましょう。
関数の命名の代表パターン
関数の命名をするときの単語の区切りを表現する方法として、代表的な3パターンを挙げます。
キャメルケース
複合語をひと綴りで表現し、次の単語の始まりを大文字で表す表現法です。
例)camelCase
スネークケース
単語の区切りをアンダースコア( _ )で表現する方法です。
例)snake_case
パスカルケース
キャメルケースと似ていますが、最初の単語も大文字で表す事が特徴です。
例)PascalCase