有没有办法创建我自己的自定义超全局变量,如$ _POST和$ _GET?
答案 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)
否强>
中只列出了内置的超全局答案 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'];