【问题标题】:PHP global keyword and assignmentPHP 全局关键字和赋值
【发布时间】:2016-03-30 14:10:20
【问题描述】:

我已经定义了一个$foo 全局变量。

稍后,我想将$foo 设置为其他值。

public function bar()
{
    global $foo;
    $foo = 'hello';
}

将其缩短为一行是否有任何意想不到的副作用?

public function bar()
{
    global $foo = 'hello';
}

我查看了the documentation 并没有看到他们在同一行声明和分配变量。因此,我想知道是否有其他人在这样做时遇到过问题,或者将它放在一行中是否只是一种糟糕的编码习惯?

【问题讨论】:

    标签: php global-variables global


    【解决方案1】:

    如果您尝试运行您在问题中建议的代码,您将收到语法错误。您不能像上面那样定义全局变量。

    如果您仍想在一行中定义该值,您可以使用 $GLOBALS 数组,如下所示:

    public function bar(){
        $GLOBALS['foo'] = 'hello';
    }
    

    如果你想看看,这里是the documentation


    你可以在这里设置变量:

    function bar(){
    
        global $hello;
        $hello = "hello";
    
    }
    

    然后像这样编辑它:

    function foo(){
        $GLOBALS['hello'] = "world"; 
    }
    

    如果您运行此代码:

    bar();
    foo();
    
    print_r($GLOBALS);
    

    $GLOBALS['hello'] 的值将是 'world'。当在bar(); 之前执行foo(); 以相反的方式运行时,您将获得'hello' 作为全局值。

    【讨论】:

    • 感谢您的回答。你会认为他们会提到 global $hello = "hello"; 会引发错误,因为 static $hello = "hello"; 不会引发错误。
    • $GLOBALS['hello'] 的问题是某些 IDE 无法提供带有这种概念的代码完成功能。
    【解决方案2】:

    我的解决方案是一行不使用$GLOBALS

    global $foo; $foo = 'hello';

    有点凌乱,但在某些情况下看起来仍然比一个作业的 2 行代码要好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 2011-12-26
      • 2012-06-22
      • 2016-03-27
      • 1970-01-01
      相关资源
      最近更新 更多