Posts Tagged ‘変数’

変数のスコープと引数の渡し方

2009年11月26日 at 2:47 AM  Author: admin

 う~ん・・・やっぱーいまいち、変数の使い方がおかしい?
メインスクリプトがあって、そのスクリプト中は function で作った関数を参照しますね。で、実行結果を値として取得して、その値を利用します。でも、変数のスコープとやらなんやらで、実行結果の値が取得できません。そこで、 function 内の変数を global 宣言してやったらうまくいった。しかーし、なんか変?

function aaabbb($a,$b){
$c = $a + $b;
}
aaabbb(1,2);
ver_dump($c); // 結果は NULL

 そこで、global 宣言しちゃえって事で、

function aaabbb($a,$b){
global $c;
$c = $a + $b;
}
aaabbb(1,2);
ver_dump($c); // 結果は int(3)

と、やってきた。結果はバッチリ!!でもね~、なんか変なんだよね~・・・気持ち悪いって言うか・・・。そこでひらめいた事は、通常、変数は事前に定義される物なんじゃないかって事?なので、本来の書き方は、

$a = NULL;$b = NULL;$c = NULL; //変数初期化

function aaabbb($a,$b){
global $c;
$c = $a + $b;
}
aaabbb(1,2);
ver_dump($c);

どう?正解?う~ん、よう分からん・・・。
こんな作り方(参照の仕方)をしているので、ほとんどすべての変数が global 宣言しちゃっている。そうしないと値が取得できないもんで・・・うおおおおっっっーーー、なんか変だぁー。そう、もうお気づきですね。「変数の参照方法をまったく使っていない」状態な事に気が付きました。

そこで、先日購入した入門書を見てみると、ちゃんと書いてあるじゃないですかって、あたりまえか。「戻り値の利用」「引数の渡し方」など。なるほど~。 return を使うのかー。

function aaabbb($a,$b){
$c = $a + $b;
return $c;
}
$ans = aaabbb(1,2);
var_dump($ans);

これで、 $cglobal 宣言しなくともすみますな。ちょっとスッキリ爽やかな気分になりましたね。でも、よく考えてみると、CGI(perl)でも、同じようにやったような気がするなー。って、やったよね?まぁ、すっかり忘れてしまっているが・・・。そんなことより、明日は今まで書いたスクリプトの修正を行わねばぁぁぁ!そんなこんなで、PHP変数についての初級講座でした(笑)