ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4148010 スコープについて
質問者:Tinte  PHPの変数スコープでは、global変数をglobalキーワードを使って、localに持ち込むことや、$GLOBALSを利用して呼び込むことができますが、local変数を関数の外(つまりglobal変数として)に持ち出すにはどうしたらよいのでしょうか?
<?
function example() {
//なんらかの処理
$flag = 1;
//なんらかの処理
}
echo $flag;
?>

これだと駄目なんですよね?
returnで返す値にはその他のものが入っていて、一部のローカル変数のみを一時的にグローバル化したい…と思っています。
 よろしくお願いします。
困り度:
  • すぐに回答を!
質問投稿日時:
08/07/03 12:37
この質問に対する回答は締め切られました。

回答良回答10pt

ANo.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に「参照渡し」があるとは知りませんでした。
大変参考になりました。
ありがとうございました。
回答者:muchag
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/07/03 16:05
この回答へのお礼ありがとうございます。
returnに配列を設定できるんですね。。。知らなかった…。

globalで渡す
returnの配列で渡す

この二つがあれば、かなり大量のデータも外に引っ張り出せるので充分です!
とても参考になりました。ありがとうございます!

(muchagさんのコードもきちんと動きました!)

回答良回答20pt

ANo.1 ん??exampleを実行しなければどうしようもないのでは?
普通にglobalにすればいいんじゃないですか?

<?
function example(){
global $flag ;
$flag = 1;
}
example();
echo $flag;
?>

あとは引数でリファレンス渡しするとか・・・

<?
function example(&$flag){
$flag = 1;
}
example($flag);
echo $flag;
?>
回答者:yambejp
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/07/03 13:08
この回答へのお礼 ありがとうございます!
「はじめてのPHP5(オライリー)」を片手に勉強中です。ここで質問するとスポットで解答して頂けてとてもありがたいです。

 ローカルからグローバルにもglobalキーワードでOKだとは知りませんでした。テストしてみたら手堅く取り出せました!
 ありがとうございます。

 またリファレンスも非常に参考になりました!!