我遇到了一个让我感到困惑的PHP问题
即:注意:未定义的变量:第86行的/var/www/dd.lo/app/libraries/system/input.php中的_GET
打电话时会弹出:
$this->input->get('test');
该函数调用另一个函数(如果我的方法不好请不要生气。如果你告诉我如何正确地做,我会很高兴的):
public function get ($index)
{
return $this->_getArray('_GET', $index);
}
这是私有函数的代码:
private function _getArray ($array, $index)
{
if (isset(${$array}[$index]))
{
return ${$array}[$index];
}
else
{
return NULL;
}
}
Input类可以方便地访问_POST,_GET,_COOKIE和_SERVER数据,并允许您避免类型检查:
if (isset($_POST['name']))
{
$name = $_POST['name'];
}
else
{
$name = NULL;
}
顺便提一下,它要求http://dd.lo/?test=dgdsgsdgsdgsd的页面(即$ _GET,我问过)
如果你写var_dump($ _ GET);然后是索引“测试”。
答案 0 :(得分:3)
为英语道歉,但我不会说或读你的语言(俄语?)。这个答案是基于谷歌翻译的你所问的版本。
PHP的超级全局变量($_GET
,$_POST
等)是特殊变量,看起来你不能将这些变量与PHP的变量变量功能一起使用。例如,这可行
$foo = ['Hello'];
$var_name = 'foo';
var_dump($$var_name);
“变量变量”$$var_name
扩展为$'foo'/$foo
,变量转储正确。
但是,以下操作不起作用
$var_name = '_GET';
var_dump($$var_name);
似乎无论魔法范围变量变量存在,该范围都不包括超级全局变量。你需要重新考虑你的方法。您可以这样做的一种方法是接受实际数组而不是名称的字符串,并在函数中指定“by reference”参数以避免任何性能问题
function _getArray(&$array, $key)
{
if(!is_array($array)) { throw new Exception("Invalid argumnet!");}
if(array_key_exists($key, $array))
{
return $array[$key];
}
return NULL;
}