PHP return false with a string
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.
Answer
Solution:
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 usedif ($result)
as your check and you return a "truthy" value, the condition is always true. You need to change that check to: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:
Some native PHP functions behave like this (eg:
.) 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):
Now you can also take advantage of the fact that empty arrays are falsy:
Answer
Solution:
You can use
===
to check if the returned value is boolean true.===
checks the type as well the value.Answer
Solution:
I came up against this recently, my function would either return an error message as a string or return true like this:
I would call it and check the outcome like this:
This checks that the outcome of the function is not just a truthy string, but is explicitly a boolean true
Answer
Solution:
This could be useful to someone returning true or returning false as a string.