変数のスコープと引数の渡し方
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 宣言しちゃっている。そうしないと値が取得できないもんで・・・うおおおおっっっーーー、なんか変だぁー。そう、もうお気づきですね。「変数の参照方法をまったく使っていない」状態な事に気が付きました。
そこで、先日購入した入門書を見てみると、ちゃんと書いてあるじゃないですかって、あたりまえか。「戻り値の利用」「引数の渡し方」など。なるほど~。 return を使うのかー。
|
function aaabbb($a,$b){ $c = $a + $b; return $c; } $ans = aaabbb(1,2); var_dump($ans); |
これで、 $c を global 宣言しなくともすみますな。ちょっとスッキリ爽やかな気分になりましたね。でも、よく考えてみると、CGI(perl)でも、同じようにやったような気がするなー。って、やったよね?まぁ、すっかり忘れてしまっているが・・・。そんなことより、明日は今まで書いたスクリプトの修正を行わねばぁぁぁ!そんなこんなで、PHP変数についての初級講座でした(笑)


