没有使用PHP很长一段时间,跳回来并被一个对我来说没有意义的错误命中,这段代码:
$errorCount = 0;
$errorList = array();
function getParam($paramId){
if (isset($_GET[$paramId])){
$id = $_GET[$paramId];
} else {
$errorList[] = (string)$paramId;
$errorCount++;
};
};
getParam("id");
弹出的错误是: 未定义的变量:errorCount
我不明白为什么会失败,但$ errorList没有 - 我确定这是愚蠢的事。
答案 0 :(得分:2)
这是一个可变范围问题。该变量在函数范围内不可用,因此它只显示错误消息。
考虑以下情况:
$hello = 'hello';
function test() {
echo $hello;
}
test();
变量$hello
在代码中定义,但是当您尝试执行上述代码时,您会收到错误Undefined variable: hello
。
如果您希望在函数内部访问变量,请将它们作为参数传递,如下所示:
$hello = 'hello';
function test($hello) {
echo $hello;
}
test($hello);
现在,为了解决您的实际问题,您可以将$errorCount
作为reference传递:
$errorCount = 0;
$errorList = array();
function getParam($paramId, & $errorCount){
if (isset($_GET[$paramId])){
$id = $_GET[$paramId];
} else {
$errorList[] = (string)$paramId;
$errorCount++;
};
};
另一种解决方案是使用global
变量,但在我看来,这不是非常良好做法,如果可能,应该避免使用。您可能需要查看this帖子以了解原因。
有关此问题的详情,请参阅PHP Manual。
答案 1 :(得分:0)
这是因为您的变量未在函数范围内定义。你有几个选择。 1选项是将这些变量声明为全局变量。或者你可以创建一个类。
function getParam($paramId){
global $errorList;
global $errorCount;
if (isset($_GET[$paramId])){
$id = $_GET[$paramId];
} else {
$errorList[] = (string)$paramId;
$errorCount++;
};
};
您还可以通过引用传递变量:
例如:
$my_variable = array();
$my_variable_ct = 0;
function fn($arg1, $my_var, $my_var_count) {
// do everything here
}
fn("Hello", &$my_variable, &$my_variable_ct);
答案 2 :(得分:0)
默认情况下无法访问在函数外部定义的正常变量。要联系他们,我们应该使用global $var1, $var2;
来访问他们的价值:
$errorCount = 0;
$errorList = array();
function getParam($paramId){
global $errorList, $errorCount;
if (isset($_GET[$paramId])){
$id = $_GET[$paramId];
} else {
$errorList[] = (string)$paramId;
$errorCount++;
};
};
getParam("id");