1

好的,所以我刚刚完成了一个用于验证firstname表单上的字段的功能。

此功能可自行正常工作。

但由于我想让这个功能可以在多个网站上重复使用,所以我添加了一个if是否使用它的声明。下面的代码解释了这一点:

相关PHP代码:

//Specify what form elements need validating:
$validateFirstname = true;

//array to store error messages
$mistakes = array();

if ($validateFirstname=true) {
    //Call first name validation function
    $firstname = '';
    if (!empty($_POST['firstname'])) {
        $firstname = mysql_real_escape_string(stripslashes(trim($_POST['firstname'])));
    }
    $firstname = validFirstname($firstname);
    if ($firstname === '') {
        $mistakes[] = 'Your first name is either empty or Enter only ALPHABET characters.';
    }
    function validFirstname($firstname) {
        if (!ctype_alpha(str_replace(' ', '', $firstname))) {
            return '';
        } else {
            return $firstname;
        }
    }
}

因此,如果没有这个if ($validateFirstname=true)代码运行良好,但我添加它的那一刻;我收到以下错误消息:

Fatal error: Call to undefined function validFirstname()

您根本无法if在 PHP 中的语句中使用函数吗?我对以这种方式使用它们还很陌生。

4

3 回答 3

4

条件函数(在条件内定义的函数)必须在引用之前定义。这是手册所说的

函数在被引用之前不需要定义,除非一个函数是有条件地定义的,如下面的两个例子所示。

当以条件方式定义函数时,例如所示的两个示例。它的定义必须在被调用之前进行处理。

因此,如果您想以这种方式使用它,则应将其放在 if 条件的开头或条件之外。

// Either:
if ($validateFirstname==true) {
    function validFirstname($firstname) {}
}

// Or, and I'd rather do it this way, because function is
// created during "compilation" phase
function validFirstname($firstname) {}
if ($validateFirstname==true) {
    // ...
}

也不是该函数(即使在条件内创建)被推送到全局范围:

PHP 中的所有函数和类都具有全局作用域——即使它们是在函数内部定义的,它们也可以在函数外部调用,反之亦然。

因此,一旦代码被评估,它是在条件内声明还是有意在全局范围内声明都无关紧要。

于 2013-04-20T17:30:04.160 回答
2

在条件上下文(如if主体)中声明的函数,只能在声明后使用。

if ($validateFirstname == true) {
    //Call first name validation function
    function validFirstname($firstname) {
        // function body
    }
    // $firstname initialisation
    $firstname = validFirstname($firstname);
    // ...
}

(ps:改成$validateFirstname = true哪个$validateFirstname == true应该是你想要的)

于 2013-04-20T17:28:33.597 回答
0
if($validateFirstname=true)

您在这里将值“true”分配给 $validateFirstname 您应该使用“==”进行比较,例如

 if($validateFirstname==true)

这可能有助于您的“如果”问题

于 2013-04-20T17:27:18.497 回答