在php中创建超全局变量?

时间:2009-05-07 12:55:36

标签: php

有没有办法创建我自己的自定义超全局变量,如$ _POST和$ _GET?

10 个答案:

答案 0 :(得分:47)

静态类变量可以全局引用,例如:

class myGlobals {

   static $myVariable;

}

function a() {

  print myGlobals::$myVariable;

}

答案 1 :(得分:28)

是的,这是可能的,但不是所谓的“核心”PHP功能。您必须安装名为runkit的扩展: http://www.php.net/manual/en/runkit.installation.php

之后,您可以在php.ini中设置自定义超全局,如下所示: http://www.php.net/manual/en/runkit.configuration.php#ini.runkit.superglobal

答案 2 :(得分:18)

我认为你已经拥有它 - 你在全球空间创建的每个变量都可以使用 $ GLOBALS suberglobal来访问:

// in global space
$myVar = "hello";

// inside a function
function foo() {
    echo $GLOBALS['myVar'];
}

答案 3 :(得分:6)

解决此问题的另一种方法是使用静态类方法或变量。

例如:

class myGlobals {

   public static $myVariable;

}

然后,在您的函数中,您可以简单地引用您的全局变量:

function Test()
{
 echo myGlobals::$myVariable;
}

不像其他语言一样干净,但至少你不必一直声称它是全局的。

答案 4 :(得分:5)

   Class Registry {
 private $vars = array();
 public function __set($index, $value){$this->vars[$index] = $value;}
 public function __get($index){return $this->vars[$index];}
}
$registry = new Registry;

function _REGISTRY(){
    global $registry;
    return $registry;
}

_REGISTRY()->sampleArray=array(1,2,'red','white');

//_REGISTRY()->someOtherClassName = new className;
//_REGISTRY()->someOtherClassName->dosomething();

class sampleClass {
    public function sampleMethod(){
        print_r(_REGISTRY()->sampleArray); echo '<br/>';
        _REGISTRY()->sampleVar='value';
        echo _REGISTRY()->sampleVar.'<br/>';

    }
}

$whatever = new sampleClass;

$whatever->sampleMethod();

答案 5 :(得分:3)

不是真的。虽然如果你不介意它的丑陋,你可以滥用那里的那些。

答案 6 :(得分:3)

this manual

中只列出了内置的超全局

答案 7 :(得分:1)

您还可以使用服务器的Environment变量,并在PHP中访问它们 如果您拥有并专门使用服务器,这是存储全局数据库访问权限的好方法。

答案 8 :(得分:1)

一种解决方案是在单独的 php 文件中创建超全局变量,然后使用 auto_prepend_file 指令在每次 php 调用时自动加载该文件。

这样的事情在重启你的 php 服务器后应该可以工作(你的 ini 文件位置可能不同):

/usr/local/etc/php/conf.d/load-my-custom-superglobals.ini

auto_prepend_file=/var/www/html/superglobals.php

/var/www/html/superglobals.php

<?php
  $_GLOBALS['_MY_SUPER_GLOBAL'] = 'example';

/var/www/html/index.php

<?php
  echo $_MY_SUPER_GLOBAL;

答案 9 :(得分:0)

$GLOBALS

可能的解决方法

<强> file.php:

$GLOBALS['xyz'] = "hello";

any_included_file.php:

echo $GLOBALS['xyz'];