好的,所以我刚刚完成了验证表单上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
语句中的函数?我很擅长以这种方式使用它们。
答案 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”问题