使变量可用于所有类,方法,函数和包含,就像$ _POST一样

时间:2013-03-16 02:35:43

标签: php oop scope

这个问题看起来很简单,但我无法在任何地方找到答案......

在我的php脚本/文件的开头,我想创建一个变量。

$variable = 'this is my variable';

我希望这个变量在整个脚本中可用,因此所有类,方法,函数,包含的脚本等都可以简单地将此变量称为$ variable。

Class MyClass
{
  public function showvariable()
  {
     echo $variable;
  }
}

$ _SESSION,$ _POST,$ _GET变量的行为都是这样的。我可以编写一个方法并使用$ _POST,它会工作。但是如果我使用我在脚本开头定义的$ variable,它会说“注意:未定义的变量:变量在......”它甚至会说,当我编写一个函数时,而不是类方法。

我试着写

global $variable = 'this is my variable';

但是剧本不会加载...... “HTTP错误500(内部服务器错误):服务器尝试完成请求时遇到意外情况。”

如何使变量真正全局可访问,如$ _POST?

为什么我需要这个?我特意计划将它用作表单令牌。在页面顶部,我将表单标记生成为$ token,在页面底部我将其存储在会话中。在处理任何表单之前,我检查SESSION令牌是否与POST令牌匹配...并且因为我经常在页面上有多个表单(顶部导航中的登录表单,以及主体中的注册表单)我只是想让它方便在每个表单上调用$ token。有时我的formelements是由类或函数生成的,但它们不识别变量并说它没有被定义。

4 个答案:

答案 0 :(得分:15)

我发现了...... - .-我认为这很容易......

我必须使用

调用变量
$GLOBALS['variable'];

刚刚找到它......终于...... http://php.net/manual/en/reserved.variables.globals.php

编辑就像8个月后左右:

我刚刚了解了CONSTANTS!

define('name', 'value');

他们无法重新分配...... 我想我也可以用它! http://www.php.net/manual/en/language.constants.php

答案 1 :(得分:10)

只需在任何类或函数之外定义变量。然后在任何类或函数中使用关键字global

<?php

// start of code

$my_var = 'Hellow Orld';

function myfunc() {
  global $my_var;
  echo $my_var; // echoes 'Hellow Orld';
}

function myOtherFunc() {
  var $my_var;
  echo $my_var; // echoes nothing, because $my_var is an undefined local variable.
}


class myClass {

  public function myFunc() {
    global $my_var;
    echo $my_var; // echoes 'Hellow Orld';
  }

  public function myOtherFunc() {
    var $my_var;
    echo $my_var; // echoes nothing.
  }

}

myFunc(); // "Hellow Orld"
myOtherFunc(); // no output
myClass->myFunc(); // "Hellow Orld"
myClass->myOtherFunc(); // no output

// end of file
?>

答案 2 :(得分:2)

您需要声明全局以在任何函数范围内访问它:

位于脚本顶部:

global $var;
$var= "this is my variable";
你班上的

...
public function showvariable(){
    global $var;
    echo $var;
}
...

答案 3 :(得分:2)

在PHP中,必须在将使用它们的每个函数中声明全局变量。请参阅:PHP Manual, section on variable scope

话虽如此,全局变量通常是一个坏主意,在大多数情况下,有一种方法可以避免使用它们。