• ベストアンサー

スコープについて

 PHPの変数スコープでは、global変数をglobalキーワードを使って、localに持ち込むことや、$GLOBALSを利用して呼び込むことができますが、local変数を関数の外(つまりglobal変数として)に持ち出すにはどうしたらよいのでしょうか? <? function example() { //なんらかの処理 $flag = 1; //なんらかの処理 } echo $flag; ?> これだと駄目なんですよね? returnで返す値にはその他のものが入っていて、一部のローカル変数のみを一時的にグローバル化したい…と思っています。  よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ん??exampleを実行しなければどうしようもないのでは? 普通にglobalにすればいいんじゃないですか? <? function example(){ global $flag ; $flag = 1; } example(); echo $flag; ?> あとは引数でリファレンス渡しするとか・・・ <? function example(&$flag){ $flag = 1; } example($flag); echo $flag; ?>

Tinte
質問者

お礼

 ありがとうございます! 「はじめてのPHP5(オライリー)」を片手に勉強中です。ここで質問するとスポットで解答して頂けてとてもありがたいです。  ローカルからグローバルにもglobalキーワードでOKだとは知りませんでした。テストしてみたら手堅く取り出せました!  ありがとうございます。  またリファレンスも非常に参考になりました!!

その他の回答 (1)

  • muchag
  • ベストアンサー率0% (0/2)
回答No.2

> local変数を関数の外(つまりglobal変数として)に持ち出すにはどうしたらよいのでしょうか? と > returnで返す値にはその他のものが入っていて、一部のローカル変数のみを一時的にグローバル化したい…と思っています。 から、Tinteさんは、 ・関数内で初めて定義した変数を関数外へ持ち出したい ・でも、return で戻せる変数は1つだから $flag は返せない と推測してみました。 これが合っているとすれば、こんな方法もあったと思います。 既に return にセットされている変数を $hoge とします。 <? function example() { //なんらかの処理 $flag = 1; //なんらかの処理 return array($hoge, $flag); } list($hoge, $flag) = example(); echo $flag; ?> (未検証、確かこういう記述だったと思います) list関数を使ってやることで、関数からの戻り値を複数に設定できるはずです。 yambejpさんへ PHPに「参照渡し」があるとは知りませんでした。 大変参考になりました。 ありがとうございました。

Tinte
質問者

お礼

ありがとうございます。 returnに配列を設定できるんですね。。。知らなかった…。 globalで渡す returnの配列で渡す この二つがあれば、かなり大量のデータも外に引っ張り出せるので充分です! とても参考になりました。ありがとうございます! (muchagさんのコードもきちんと動きました!)

関連するQ&A

専門家に質問してみよう