PHP 関数
プログラムを書いてゆく上で、一度やった処理をまた別のところで使用したいという事は多々あるものです。 そのたびに同じコードを書いていたら馬鹿みたいと思いませんか? そういう何度も使う部分は部品のように各所から使用できるようにしてやれば良い・・・ って事で関数の登場です。 関数はプログラムコードの様々なところから呼び出しが出来ることでコードの再利用を促します。 書式は
function 関数名(引数・・・){
処理コード
}
といった具合になります。意外とプログラム初心者はここら辺がこたえるところみたいですが、 ここが理解できればあとは殆どがこの応用みたいなもんです、よね?
では実際に関数を定義してみましょう。 ここでは足し算をおこなうだけの簡単な関数を定義してみたいと思います。
スコープについて
スコープとは変数の有効範囲ともいえるものです。 関数を使用しない状況においてスコープはあまり意味をなしませんが、 関数を使用し始めたこれからは常にこのスコープという考え方を忘れてはいけません。 例えば・・・
ではどうしても同じ変数を扱いたいという場合はどうしますか? 手っ取り早い方法としてはグローバル変数を使用して解決します。
上記でグローバル変数について言及しましたが、 もっとスマートな方法も存在します。 というかこちらの方がオーソドックスなやり方でしょう。
引数の設定にはデフォルト定義という事もできます。 これは、あらかじめ想定される引数があればそれを前もって設定しておくことが出来るというものです。
function 関数名(引数・・・){
処理コード
}
といった具合になります。意外とプログラム初心者はここら辺がこたえるところみたいですが、 ここが理解できればあとは殆どがこの応用みたいなもんです、よね?
では実際に関数を定義してみましょう。 ここでは足し算をおこなうだけの簡単な関数を定義してみたいと思います。
<?php
function fadd($a,$b){
return $a + $b;
}
$res = fadd(4,8);
echo($res);
?>
以下結果表示
12function の行からが関数の定義です。 関数には引数というものと戻り値というものを持つ事が出来ます。 引数は関数名の後の ( ) で渡します。 引数の数は定義したものと呼出し元の数があっていれば何個でも問題ありません。 戻り値は return の右側の値になります。ここでは引数として4と8を渡し、 関数内で加算を行ったものをすぐさま return で戻しています。 戻ったものが = で $res に代入されているわけです。基本はこれだけの事なので難しい事は無いかと思います。
スコープについて
スコープとは変数の有効範囲ともいえるものです。 関数を使用しない状況においてスコープはあまり意味をなしませんが、 関数を使用し始めたこれからは常にこのスコープという考え方を忘れてはいけません。 例えば・・・
<?php
function fadd($a,$b){
$res = $a + $b;
}
fadd(4,8);
echo($res);
?>
以下結果表示
あれ?何も表示されない? この関数を書いた人は多分、関数内で $res に値を代入したので期待した数値が表示されるとおもったのでしょう。 関数中で宣言された変数は関数内の中でのみ有効です。 従って関数を終了した時点で12を代入した $res は破棄されてしまい、 echo の部分の $res はまったく定義されていない新しい $res が使用されてしまったわけです。 これがスコープです。
ではどうしても同じ変数を扱いたいという場合はどうしますか? 手っ取り早い方法としてはグローバル変数を使用して解決します。
<?php
$res;
function fadd($a,$b){
global $res;
$res = $a + $b;
}
fadd(4,8);
echo($res);
?>
以下結果表示
12関数内で global を使用して宣言するとスコープを超えて変数を使用することができます。 ですが、これは余りお勧めしません。 というのもスコープはコーディング上の利便性を考慮して付けられた機能です。 プログラムの何処からでもアクセスできる変数というのは便利であるかのように見えますが、 いったんバグが発生すると何処が問題なのかを判らなくしてしまう可能性をはらんでいます。 基本は引数や戻り値で値を取得するようにしましょう!
上記でグローバル変数について言及しましたが、 もっとスマートな方法も存在します。 というかこちらの方がオーソドックスなやり方でしょう。
<?php
$res = 0;
function fadd(&$r,$a,$b){
$r = $a + $b;
}
fadd($res,4,8);
echo($res);
?>
以下結果表示
12このサンプルでは、関数の外で宣言した $res という変数を参照渡しという方法 (といっても簡単で、関数の引数部分に & を付けてやるだけです) で渡してあげると、関数内の $r は = $res となり、$r に代入する事で $res にも代入した事になります。 このやり方は覚えておくと非常に使い道があります。
引数の設定にはデフォルト定義という事もできます。 これは、あらかじめ想定される引数があればそれを前もって設定しておくことが出来るというものです。
<?php
function fadd($a,$b =8){
$r = $a + $b;
echo $r;
}
fadd(4);
?>
以下結果表示
12ここでは第二引数の $b にデフォルト値として 8 を設定しておきました。 これを設定しておく事で引数が渡されなかった場合は自動でデフォルト値が代入されるという仕組みです。 このデフォルト設定ですが、参照渡しされる変数($の前に&を付ける場合)には設定できません。 付けるのエラーになるので注意が必要です。
2008年 10月 6日ドキュメント作成
2008年 10月 6日ドキュメント更新