很长一段时间
没有使用PHP,跳回去并被一个对我来说没有意义的错误击中,这段代码:
$errorCount = 0;
$errorList = array();
function getParam($paramId){
if (isset($_GET[$paramId])){
$id = $_GET[$paramId];
} else {
$errorList[] = (string)$paramId;
$errorCount++;
};
};
getParam("id");
弹出的错误是:未定义的变量:错误计数
我不明白为什么这会失败,但$errorList没有 - 我确信这是愚蠢的事情。
这是一个可变范围问题。该变量在函数的作用域内不可用,因此它只会显示错误消息。
请考虑以下情况:
$hello = 'hello';
function test() {
echo $hello;
}
test();
现场观看!
变量$hello
在代码中定义,但是当您尝试执行上述代码时,会收到一条错误消息,指出Undefined variable: hello
。
如果您希望变量在函数中可访问,请将它们作为参数传递,如下所示:
$hello = 'hello';
function test($hello) {
echo $hello;
}
test($hello);
现场观看!
现在,要解决您的实际问题,您可以将$errorCount
作为参考传递:
$errorCount = 0;
$errorList = array();
function getParam($paramId, & $errorCount){
if (isset($_GET[$paramId])){
$id = $_GET[$paramId];
} else {
$errorList[] = (string)$paramId;
$errorCount++;
};
};
另一种解决方案是使用global
变量,但在我看来,这不是一个很好的做法,如果可能的话,应该避免。您可能需要查看这篇文章以了解原因。
有关此内容的更多信息,请参阅 PHP 手册。
这是因为您的变量未在函数范围内定义。您有几个选择。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);
默认情况下,在函数外部定义的普通变量不可访问。为了接触它们,我们应该简单地使用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");