在if语句中使用函数时,获取'致命错误:调用未定义的函数'?

时间:2013-04-20 17:23:57

标签: php function validation variables if-statement

好的,所以我刚刚完成了验证表单上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()

您是否无法在PHP中使用if语句中的函数?我很擅长以这种方式使用它们。

3 个答案:

答案 0 :(得分:4)

条件函数(条件中定义的函数)必须在引用之前定义。 Here's what manual says

  

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

     

当以诸如二者的条件方式定义函数时   显示的例子。其定义必须之前处理   调用。

因此,如果你想以这种方式使用它,你应该把它放在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中的所有函数和类都具有全局范围 - 即使它们是在内部定义的,也可以在函数外部调用它们,反之亦然。

因此,一旦对代码进行了评估,它是在条件内声明还是故意在全局范围内声明无关紧要。

答案 1 :(得分:2)

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

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

(P.s。:将$validateFirstname = true改为$validateFirstname == true,这应该是你想要的)

答案 2 :(得分:0)

if($validateFirstname=true)

您在此处为$ validateFirstname分配值“true” 你应该使用“==”进行比较,例如

 if($validateFirstname==true)

可能有助于解决“if”问题