У меня есть класс формы 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";
}
всегда дает правильный выход. Несмотря на то, что мой код работает так, как ожидалось, все равно важно понять, что происходит за кулисами и почему. Итак, мои вопросы относительно этого поведения:
- Что несет ответственность за функцию bool, возвращающую строку? Например, было ли это по дизайну или побочным продуктом какого-то другого процесса?
- Существуют ли сценарии, в которых это неожиданное возвращаемое значение может вызвать проблему? Или система понимает эту оценку и всегда обрабатывает ее соответственно? Теперь мой код работает отлично, но я не думаю, что его надуманный, чтобы ожидать неожиданных возвратных значений, вызывающих некоторые проблемы раньше или позже.
Я ценю любую информацию, которую вы можете предоставить. Благодаря!
'filter_var' возвращает логическое значение false, если фильтр не работает; в противном случае он возвращает отфильтрованные данные - http://php.net/manual/en/function.filter-var.php – andrewsi