- ベストアンサー
$GLOBALS['b']とecho $b;の結果は?
- サンプル1のコードの結果は、$GLOBALS['b']に2を足した値が表示されます。
- サンプル2のコードの結果も同じく、$GLOBALS['c']に2を足した値が表示されます。
- 変数のスコープを理解するためのプログラム例としては正しいですが、値を直接参照する場合はグローバル変数を使用しないほうが良いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
結論からいえば「よほどのことがない限り$GLOBALSは使わない」ということ なので、「こんな機能もあるよ」という意味でのサンプルとしてはありですが 実際にこんな書き方をすることはマレです それを踏まえて、$GLOBALS['c']の書き方はほぼ間違いありませんが プログラムの基本として初期値の設定をする癖をつけておいた方が いいかもしれません。 <?php $a = 1; $b = 2; $c= 0; //←こんな感じ function Sum() { $GLOBALS['c'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $c; ?>
その他の回答 (2)
- agunuz
- ベストアンサー率65% (288/438)
>構文的には、間違っていないでしょうか!? Syntax Errorにならないなら構文的には問題ありませんし、undefined variablesやundefined indexにもならないなら何も問題ありません。 >最初のプログラムと、同じ結果になるのでしょうか? どういう結果になるかは試せばわかると思います。それともphpを学ぶのに試す環境がないのでしょうか? ちなみに(前回も書きましたが)普通は ・引数で渡す $a = 1; $b = 2; $c = Sum($a, $b); echo $c; function Sum($arg1, $arg2) { return $arg1 + $arg2; } ・global宣言する <?php $a = 1; $b = 2; $c = Sum(); echo $c; function Sum() { global $a, $b; return $a + $b; } のどちらかです。間違ってもfunction内でグローバルスコープの変数($GLOBALS['c'])をいきなり生成してはいけません(メイン部分で知らずに $c を使う可能性がある)。 基本的にfunctionは「値を渡して」「処理してもらって」「戻り値を受け取る」ものです。それ以外の動作を与えるときは『こうでないと書けない』理由があるときだけです(普通はそんな理由はあり得ません=なのでそういう書き方をしない)。
補足
毎度うご回答ありがとうございます。 Q:結果になるかは試せばわかる そうですね、その試す方法を模索中です。 xamppはインストールしました。 以前学んでいた教本の、jQueryのシステムプを使用したサンプルプログラムは ちゃんと動いてはいます。 その環境で、 いきなり、以下の プログラムを動かすとなると、 <?php $a = 1; $b = 2; function Sum() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $b; ?> 以上のプログラムですが、 xamppフォルダ内の 既定のhtdocsフォルダ内に 以上プログラムを ファイル名 sample.php として保存して アドレスがhttp://localhost/sample.php と割り当てられます。 しかし、 エラーがでて、出来ませんでした!? やり方が間違っているのでしょうか!? iisは停止しています。 また別の方法があるのか、独学なので、誰に聞きようがないです!? 何か間違っていたなら、お手数ですが、再度 ご教授の程のよろしくお願いいたします。
- hitomura
- ベストアンサー率48% (325/664)
すみませんが補足をお願いします。 あなたが読んでいる参考書のタイトル・著者・出版社・ページ数をお教えください。 自分なら例示のような一瞬どうなるか判断に困るコーディングはやりませんが。 なぜならば、次にそのコードを読む人(1か月後の自分を含む)が同じところで突っかかり、コード全体の理解を不必要に遅らせることになるからです。
補足
毎度う、ご回答ありがとうございます。 今回質問した内容は、私が、勉強している参考書ではございませんでした。 先般、同サイトに質問した内容に、他者の方からご回答くださった内容に 参考として、URLがのご紹介がありました。その内容の、PHPの構文の質問でした。 http://www.php.net/manual/ja/language.variables.scope.php 以上 ご参考にされてください。 それと、私の手元いにはPHP教本は3冊ありますが、主に勉強しているの本は パーフェクトPHP(技術評論社)です。 アマゾンで見ることができます。 http://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88PHP-PERFECT-SERIES-%E5%B0%8F%E5%B7%9D-%E9%9B%84%E5%A4%A7/dp/4774144371 以上よろしくお願いいたします。
お礼
ご回答誠にありがとうございました。 助かります。 補足を他者様の書き込みと間違えて、申し訳ございませんでした。 私の質問通りに、出力した場合、 結果的には両方のプログラムは同じと分かりました。 考え方としては、間違えではなかったということで理解しましたが! ご回答くださった。 A:プログラムの基本として初期値の設定をする癖をつけておいた方が いいかもしれません。 以上了解しました。 今後ともよろしくお願いいたします。
補足
毎度うご回答ありがとうございます。 Q:結果になるかは試せばわかる そうですね、その試す方法を模索中です。 xamppはインストールしました。 以前学んでいた教本の、jQueryのシステムプを使用したサンプルプログラムは ちゃんと動いてはいます。 その環境で、 いきなり、以下の プログラムを動かすとなると、 <?php $a = 1; $b = 2; function Sum() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $b; ?> 以上のプログラムですが、 xamppフォルダ内の 既定のhtdocsフォルダ内に 以上プログラムを ファイル名 sample.php として保存して アドレスがhttp://localhost/sample.php と割り当てられます。 しかし、 エラーがでて、出来ませんでした!? やり方が間違っているのでしょうか!? iisは停止しています。 また別の方法があるのか、独学なので、誰に聞きようがないです!? 何か間違っていたなら、お手数ですが、再度 ご教授の程のよろしくお願いいたします。