PHP return false with a string

612

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.

311

Answer

Solution:

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 usedif ($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: .) 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);
}
542

Answer

Solution:

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;
}
240

Answer

Solution:

I came up against this recently, my function would either return an error message as a string or return true like this:

function check_something(){
    if(condition){
        return 'error message';
    }
    // if we got this far all is good!
    return true;
}

I would call it and check the outcome like this:

$var = check_something();

if($var !== true){
    // $var is not boolean true, so it must be a string
    echo $var;
}

This checks that the outcome of the function is not just a truthy string, but is explicitly a boolean true

809

Answer

Solution:

This could be useful to someone returning true or returning false as a string.

if (is_bool($result)) 
{
   echo 'Result is a true bool';
} 
else
{
   echo $result.'returning a string';
}

People are also looking for solutions to the problem: php - How to make Print View of invoice in Joomla VirtueMart publicly viewable?

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.