PHP return false with a string
Solution 1
Does php assume false if a var is set to anything besides true?
Not at all. PHP will return whatever the variable was set to. And actually since you have a non-empty string, that's a "truthy" value (ie: true
in a boolean context). Since you used if ($result)
as your check and you return a "truthy" value, the condition is always true. You need to change that check to:
if ($result === true) {
...
What is the correct way to handle this?
I think it's a good enough way to handle it. An alternative would be to pass an error string variable by reference, and have the fail part of your code fill that, eg:
function check($var, &$error) {
if ($var == 1) {
return true;
} else {
$error = 'This is not the correct answer. You supplied ' . $var;
return false;
}
}
Some native PHP functions behave like this (eg: exec()
.) Yet another alternative is to return an array with the errors, like Jared suggested. I personally use this option when I expect multiple errors (eg: a form validation routine):
function check_stuff($stuff) {
$errors = array();
if (!$condition1) {
$errors[] = 'Condition 1 failed';
}
if (!$condition2) {
$errors[] = 'Condition 2 failed';
}
return $errors;
}
Now you can also take advantage of the fact that empty arrays are falsy:
$errors = check_stuff($your_stuff);
if (!$errors) {
echo 'No errors!';
} else {
print_r($errors);
}
Solution 2
You can use ===
to check if the returned value is boolean true. ===
checks the type as well the value.
if ($result === true)
{
echo 'Correct!';
}
else
{
echo $result;
}
Related videos on Youtube
Ed R
Webmaster and computer programmer in php, C#, VB, Java, Javascript.
Updated on June 18, 2022Comments
-
Ed R almost 2 years
I am looking for the correct way to handle a return statement with a bool/string. For example I do all my checking inside the function and return true if it all passes. However if something went wrong I would like to return a string of what went wrong rather than just return false; with a general string. Does php assume false if a var is set to anything besides true? What is the correct way to handle this? Here's an example of what I'm doing
<?php $a = 2; $result = CheckVar($a); if ($result) { echo 'Correct!'; } else { echo $result; } function CheckVar($var) { if ($var == 1) { return true; } else { return 'This is not the correct answer. You supplied '.$var; } } ?>
It seems this method works, however is this good programming etiquette? Or is there another way I should be doing this? Thank you for your time.
-
NullUserException over 12 years@zzzzBov Exceptions are expensive. Don't throw an exception unless you have a very good reason to.
-
NullUserException over 12 years@zzzzBov Using exceptions also uglifies your code. IMO it makes no sense to throw an exception if "the answer is not correct." Exceptions should be used to handle code that doesn't behave the way it's supposed to - thus the name "Exception." You fully expect the answer to be incorrect.
-
Jared FarrishYou need to understand falsy values in PHP (Javascript, also). stackoverflow.com/questions/699507/…
-
-
Jared Farrish over 12 yearsAlthough I have approached this in different ways over the year's, in this case I might want to return an array of errors from the function, and then test the return result for how many array member's it has. This way, I don't have to maintain two different contexts (the argument and the return value).
-
NullUserException over 12 years@Jared I also use arrays when I anticipate multiple errors (eg: a form validator).
-
Ed R over 12 yearsThis works well, though it seems pass-by-reference variables are better practicing standards. Thank you for your help.