在PHP中的全局变量无法按预期工作(global variables in php not work

2019-06-24 20:27发布

我在PHP中的全局变量的麻烦。 我有一个$screen在一个文件中设定的变种,这需要调用的另一个文件initSession()在另一个文件中定义。 该initSession()宣布global $screen ,然后进一步处理$屏幕下使用非常的第一个脚本设置的值。

这怎么可能?

为了使事情变得更加混乱,如果您尝试重新设置$屏幕,然后调用initSession()它使用第一再次使用的值。 下面的代码将描述该过程。 可能有人有在解释此一展身手?

$screen = "list1.inc";            // From model.php
require "controller.php";         // From model.php
initSession();                    // From controller.php
global $screen;                   // From Include.Session.inc  
echo $screen; // prints "list1.inc" // From anywhere
$screen = "delete1.inc";          // From model2.php
require "controller2.php"         
initSession();
global $screen;
echo $screen; // prints "list1.inc" 

更新:
如果我宣布$screen只需要第二个模型前再次全球,$屏幕是正确更新initSession()方法。 奇怪。

Answer 1:

Global不会使变量全球。 我知道这是棘手的:-)

Global说,一个局部变量将被用作如果它是具有较高作用域的变量

EG:

<?php

$var = "test"; // this is accessible in all the rest of the code, even an included one

function foo2()
{
    global $var;
    echo $var; // this print "test"
    $var = 'test2';
}

global $var; // this is totally useless, unless this file is included inside a class or function

function foo()
{
    echo $var; // this print nothing, you are using a local var
    $var = 'test3';
}

foo();
foo2();
echo $var;  // this will print 'test2'
?>

需要注意的是全局变量很少是个好主意。 你可以没有他们码的时间99.99999%,你的代码更易于维护,如果你没有模糊范围。 避免global如果你能。



Answer 2:

global $foo并不意味着“使这个变量全球,让每个人都可以使用它。” global $foo含义是“功能的范围内 ,使用全局变量$foo ”。

我从你的榜样,每次,你是从一个函数中提及$屏幕假设。 如果是这样你需要使用global $screen中的每个功能。



Answer 3:

你需要把“全球$屏幕”在每一个引用它,不只是在每个文件的顶部功能。



Answer 4:

If you have a lot of variables you want to access during a task which uses many functions, consider making a 'context' object to hold the stuff:

//We're doing "foo", and we need importantString and relevantObject to do it
$fooContext = new StdClass(); //StdClass is an empty class
$fooContext->importantString = "a very important string";
$fooContext->relevantObject = new RelevantObject();

doFoo($fooContext);

Now just pass this object as a parameter to all the functions. You won't need global variables, and your function signatures stay clean. It's also easy to later replace the empty StdClass with a class that actually has relevant methods in it.



Answer 5:

全球范围跨度包括和需要的文件,你不需要使用global关键字,除非使用变量在一个函数中。 你可以尝试使用$ GLOBALS数组来代替。



Answer 6:

您必须声明一个变量作为全球前为它定义值。



Answer 7:

这是没用的,直到它是在函数或类。 环球意味着你可以在程序的任何部分使用的变量。 因此,如果全球没有在函数或类包含有没有用用全球的



文章来源: global variables in php not working as expected
标签: php global