Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获得';致命错误:调用未定义的函数';在if语句中使用函数时?_Php_Function_Validation_Variables_If Statement - Fatal编程技术网

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

Php 获得';致命错误:调用未定义的函数';在if语句中使用函数时?,php,function,validation,variables,if-statement,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 ($validat

好的,我刚刚完成了一个函数,用于验证表单上的
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;
        }
    }
}
因此,如果($validateFirstname=true)没有这个
if,代码运行良好,但在我添加它的那一刻;我收到以下错误消息:

Fatal error: Call to undefined function validFirstname()
在PHP中,您根本不能使用
if
语句中的函数吗?我对用这种方式使用它们是相当陌生的

if($validateFirstname=true)
您在此处将值“true”赋值给$validateFirstname 您应该使用“==”进行比较,例如

 if($validateFirstname==true)
这可能有助于解决你的“如果”问题

您在此处将值“true”赋值给$validateFirstname 您应该使用“==”进行比较,例如

 if($validateFirstname==true)

这可能有助于解决在条件上下文中声明的“如果”问题(如
if
body),您只能在声明后使用这些函数

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

(注意:将
$validateFirstname=true
更改为
$validateFirstname==true
,这应该是您想要的)

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

if ($validateFirstname == true) {
    //Call first name validation function
    function validFirstname($firstname) {
        // function body
    }
    // $firstname initialisation
    $firstname = validFirstname($firstname);
    // ...
}
(注意:将
$validateFirstname=true
更改为
$validateFirstname==true
,这应该是您想要的)

条件函数(在条件中定义的函数)必须在引用它们之前进行定义。

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

以条件方式定义函数时,例如 举例说明。其定义必须在被定义之前进行处理 打电话来

因此,如果您想这样使用它,您应该将它放在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中的所有函数和类都具有全局作用域——它们可以在函数外部调用,即使它们是在函数内部定义的,反之亦然

因此,一旦对代码求值,它是在条件内声明还是有意在全局范围内声明并不重要。

条件函数(在条件内定义的函数)必须在引用它们之前定义。

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

以条件方式定义函数时,例如 举例说明。其定义必须在被定义之前进行处理 打电话来

因此,如果您想这样使用它,您应该将它放在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中的所有函数和类都具有全局作用域——它们可以在函数外部调用,即使它们是在函数内部定义的,反之亦然


因此,一旦代码被评估,它是在条件内声明还是有意在全局范围内声明并不重要。

这不是您想要做的:
if($validateFirstname=true)
这不是您想要做的:
if($validateFirstname=true)
感谢@Vyktor!现在完全有意义了。:-)谢谢@Vyktor!现在完全有意义了。:-)