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()将值分配给被调用$var但仅在main()' 范围内的变量。只有main()'secho $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 回答