所以,我有这个函数从$ _REQUEST,$ _POST,$ _GET或$ _COOKIE数组中检索和继续数据。我知道只能从函数调用中使用哪个数组。简体中文:
function gg( $name, $type="_REQUEST" ) {
return isset( $GLOBALS[$type][$name] ) ? $GLOBALS[$type][$name] : false;
}
它适用于以下呼叫:
gg('var', '_GET');
gg('var2', '_POST');
但是失败了:
gg('var');
// or
gg('var', '_REQUEST');
我设法将这个问题简化为2行:
print_r( $GLOBALS['_REQUEST'] ); // this line returns nothing...
print_r( $_REQUEST ); // ...UNLESS this line is present anywhere in the code
现在,我显而易见的问题是:是否有必要将$ _REQUEST数组初始化为$ GLOBALS?
其他信息:
php: 5.3.3-7
apache: 2.2.16
also I'm running on CGI/FastCGI
如找到here,最简单的解决方案是编辑php.ini并将auto_globals_jit的值从On更改为Off。
auto_globals_jit Off
您可以在源文件中使用ini_set()而不是这个,但它对我不起作用...
ini_set("auto_globals_jit", "Off");
另一种解决方案是将$GLOBALS数组用于除$_REQUEST之外的所有内容,并且$ _REQUEST请求直接调用$ _REQUEST数组:D
if($type == "REQUEST") return $_REQUEST[$name];
else return ${"_".$type}[$name]; // or $GLOBALS["_".$type][$name] if previous won't work
答案 0 :(得分:1)
无法在我的设置上复制此内容,因此可能是CGI问题?作为一种解决方法,你可以做这样的事情......
function gg( $name, $type="_REQUEST" ) {
return isset( ${$type}[$name] ) ? ${$type}[$name] : false;
}
可能有兴趣:
自PHP 5.4起,$ GLOBALS现在即时初始化。这意味着 现在有一个好处就是不要使用$ GLOBALS变量 避免初始化它的开销。 http://www.php.net/manual/en/reserved.variables.globals.php
更新。请参阅帖子:
答案 1 :(得分:1)
只是提示:
function gg( $name, $type="_REQUEST" ) {
if($type=="_REQUEST")return $GLOBALS[$name];
return isset( $GLOBALS[$type][$name] ) ? $GLOBALS[$type][$name] : false;
}
一旦我完成了像你这样的功能:
function get_data($name)
{
if(isset($_GET[$name]))return $_GET[$name];
if(isset($_POST[$name]))return $_POST[$name];
}
答案 2 :(得分:0)
$ _ REQUEST已经是超全球"这意味着它们在整个脚本的所有范围内都可用。没有必要做全局$变量;在函数或方法中访问它们。"
function gg( $name, $type="_REQUEST" ) {
switch ($type) {
case '_REQUEST':
return $_REQUEST[$name];
break;
case 'GLOBALS':
return $_GLOBALS[$name];
break;
// etc...
default
return false;
}