Предполагает ли php значение false, если для переменной var установлено что-то кроме true?
Совсем нет.PHP вернет любую переменную, которая была установлена.И фактически, поскольку у вас есть непустая строка, это «истинное» значение (т. Е. true
в логическом контексте).Поскольку вы использовали if ($result)
в качестве чека и возвращаете «истинное» значение, условие всегда выполняется.Вам нужно изменить этот чек на:
if ($result === true) {
...
Как правильно справиться с этим?
Я думаю, что это достаточно хороший способ справиться с этим.В качестве альтернативы можно передать строковую переменную ошибки по ссылке и заполнить ошибочную часть кода, например:
function check($var, &$error) {
if ($var == 1) {
return true;
} else {
$error = 'This is not the correct answer. You supplied ' . $var;
return false;
}
}
Некоторые встроенные функции PHP ведут себя так (например: exec()
.) Еще одна альтернатива - вернуть массив с ошибками, как предложил Джаред.Я лично использую эту опцию, когда ожидаю несколько ошибок (например, подпрограмма проверки формы):
function check_stuff($stuff) {
$errors = array();
if (!$condition1) {
$errors[] = 'Condition 1 failed';
}
if (!$condition2) {
$errors[] = 'Condition 2 failed';
}
return $errors;
}
Теперь вы также можете воспользоваться тем, что пустые массивы являются ложными:
$errors = check_stuff($your_stuff);
if (!$errors) {
echo 'No errors!';
} else {
print_r($errors);
}