我有一个php表单类,用于验证表单输入。但是,在实现isEmailEmpty()
函数时,我遇到了一些意想不到的行为。这里是我的代码:php bool函数返回字符串而不是bool
class Form {
var $userEmail;
var $userPassword;
var $hashedPassword;
var $requiredPassLength = 6;
public function __construct($userEmail, $userPassword) {
$this->userEmail = $this->cleanInput($userEmail);
$this->userPassword = $this->cleanInput($userPassword);
}
public function cleanInput($dataField) {
$dataField = trim($dataField);
$dataField = stripslashes($dataField);
$dataField = htmlspecialchars($dataField);
return $dataField;
}
public function isEmailEmpty() {
return ($this->userEmail == "" || $this->userEmail == null) ? true : false;
}
public function isPasswordEmpty() {
return ($this->userPassword == "" || $this->userPassword == null) ? true : false;
}
public function isEmailValid() {
return filter_var($this->userEmail, FILTER_VALIDATE_EMAIL);
}
public function isPasswordValid() {
return (strlen($this->userPassword) >= $this->requiredPassLength) ? true : false;
}
public function hashPassword() {
return $this->hashedPassword = password_hash($this->userPassword, PASSWORD_BCRYPT);
}
// More functions down here...
现在,可以说我已经实例化一个对象通过以下方式:
$userEmail = "[email protected]";
$userPassword = "rootatoot";
$form = new Form($userEmail, $userPassword);
因为我isEmailValid()
函数返回一个布尔值,我期望得到一个布尔返回值,即在执行时为true/false或1/0。但是,情况并非如此。相反,当表达式计算结果为true时,我会得到测试的电子邮件值的字符串输出。例如,给定上面实例化的对象,语句echo $form->isEmailValid()
输出[email protected]
。运行gettype($form->isEmailValid)
返回string
,这也不是预期的。更令人好奇的是:isPasswordValid()
函数不会以这种方式表现。如果密码实际上有效,则运行$form->isPasswordValid()
返回1
。如预期的那样,运行gettype($form->isPasswordValid())
返回boolean
。我的代码仍然按预期工作,这也很有趣。例如,块
if ($form->isEmailValid()) {
echo "Valid email";
} else {
echo "Invalid email";
}
总是给出正确的输出。即使我的代码按预期运行,了解幕后发生的情况和原因仍然很重要。所以,我对于这种行为的问题是:
- 什么是负责布尔函数返回一个字符串?例如,这是设计还是其他一些流程的副产品?
- 有没有这种意外的返回值可能导致问题的任何情况?或者系统是否理解这个评估,并且始终如此处理?我的代码现在工作正常,但我不认为它牵强预测意外的返回值迟早会引起一些问题。
我很欣赏您提供的任何信息。谢谢!
如果过滤器失败,'filter_var'返回布尔值false;否则它返回过滤的数据 - http://php.net/manual/en/function.filter-var.php – andrewsi 2014-11-08 19:40:54