0

関数内のグローバル変数に問題があります

<?php
    function main(){
        $var = "My Variable";
        function sub() {
            GLOBAL $var;
            echo $var; // Will show "My Variable"
        }
        sub();
        echo $var; // Will show "My Variable" 
    }
    main();
    sub(); // Will not show and I will sub() cant use outside main() function
?>
  1. $varサブ関数内でグローバルにしたいだけです
  2. sub()main()関数の外では動作しません

私は使用に結びついていますGLOBALが、何も表示されません...何かありますか?

4

2 に答える 2

1

グローバル スコープ変数に値を代入しません$var。のスコープ内でのみ、呼び出された変数に
のみ値を割り当てます。だけが実際に値を出力します。どちらの呼び出しも出力を生成しません。 で試してみてくださいmain()$varmain()main()echo $var;sub()

<?php
function main(){
    $var = "My Variable"; 
    function sub() {
      GLOBAL $var;
      echo 'sub: ', $var, "\n";
    }
    sub();
    echo 'main: ', $var, "\n";
}
main();
sub();

出力は

sub: 
main: My Variable
sub: 

そしてhttps://en.wikipedia.org/wiki/Dependency_injectionを読んでください;-)

于 2013-03-13T08:25:35.807 に答える
1

あなたが何を望んでいるのか理解できませんが、あなた$varはグローバルではありません。main() 内のローカル変数

変数は、関数またはクラスの外で宣言した場合にのみグローバルになります。

<?php
    $var = "My Variable"; // made $var global
    function main(){
        //removed $var here
        function sub() {
            global $var;
            echo $var; // Will show "My Variable"
        }
        sub();
        echo $var; // Will throw notice:  Undefined variable: var
    }
    main();
    sub(); // Will show "My Variable"
?>

そこからメソッドを呼び出すためにメソッド内でメソッドを宣言するのはなぜですか?

たぶん、このようなものがあなたが望むものです...

<?php
   //$var = "My Variable";
    function main(){
        $var = "My Variable";
        $sub = function($var) {
            echo "sub: ".$var; // Will show "sub: My Variable"
        };
        $sub($var);
        echo "main: ".$var; //  Will show "main: My Variable"
    }
    main();
    // sub(); // Will not work
    // $sub(); // Will not work
?>
于 2013-03-13T08:31:38.293 に答える