1

这是我的代码:

$oldPhone = $_POST["phone"];

$newPhone = makeInteger($oldPhone);

lengthMustBe($newPhone, 10, "Please enter a valid 10-digit phone number.");

这是功能:

function lengthMustBe($str, $length, $errormsg) {

    if (strlen($str) != $length) {
        $status = "failure";
        $error = $errormsg;
    }

};

该功能非常不言自明..

当我尝试通过它时"123", 10, "Not long enough", $status 仍然是“成功”(在页面顶部定义。)

4

4 回答 4

2

var的范围$status在函数 lengthMustBe 内。

您可以$status像这样定义为全局变量:

function lengthMustBe($str, $length, $errormsg) {
    global $status;
    // ...
于 2013-05-14T00:12:00.287 回答
2

你需要$status像这样设置变量:

$tmpArray = lengthMustBe($newPhone, 10, "Please enter a valid 10-digit phone number.");
$status = $tmpArray[0];
$statusMsg = $tmpArray[1];

和你的功能:

function lengthMustBe($str, $length, $errormsg) {

    if (strlen($str) != $length) {

        return array("failure", $errormsg);
    }
    else
    {
        return array("success", "");
    }
}

不要使用全局变量,这只是一个糟糕的主意......

于 2013-05-14T00:13:15.263 回答
2

页面顶部的 $status 是如何定义的?我的猜测是此函数中 $status 的范围使其成为与页面顶部定义的变量不同的变量。

于 2013-05-14T00:08:32.130 回答
1

我认为 $status 不是全局的...这意味着它只会在该函数中“失败”,但是当您尝试从其他地方调用它时,会调用全局 $status - 在页面顶部。

http://php.net/manual/en/language.variables.scope.php

于 2013-05-14T00:08:41.387 回答