使变量对所有类、方法、函数和include都可用,就像$_POST一样


make variable available to all classes, methods, functions and includes, just like $_POST

这个问题似乎很简单,但是我在任何地方都找不到答案…

在我的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每个表单。有时我的表单元素是由类或函数生成的,但它们不能识别变量,并说它没有定义。

我找到了…-.-我以为这很容易…

我必须使用 来调用变量
$GLOBALS['variable'];

刚找到…最后……http://php.net/manual/en/reserved.variables.globals.php

编辑如8个月后左右:

我刚刚学习了常量!

define('name', 'value');

它们不能被重新分配…我想我也可以用这个!http://www.php.net/manual/en/language.constants.php

在任何类或函数之外定义一个变量。然后在任何类或函数中使用关键字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
?>

你需要声明全局才能在任何函数范围内访问它:

在你的脚本的顶部:

global $var;
$var= "this is my variable";

在你的类

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

在PHP中,全局变量必须在使用它们的每个函数中声明。参见:PHP手册,

变量作用域章节

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