PHP返回错误消息并返回false

时间:2012-09-28 04:05:10

标签: php exception-handling

我有一个非常简单的PHP函数来检查登录

function check_login($user, $pass) {
    if(!isset($user) || $user == '') {
        return  'Please enter a valid username';
    }
    else if(!isset($pass) || $pass == '') {
        return  'Please enter a valid password';
    }
    else {
        return 'true';
    }
}

如何在同一时间返回错误消息和false并返回true而不是'true'作为字符串。像,

function check_login($user, $pass) {
    if(!isset($user) || $user == '') {
        return  'Please enter a valid username' //return false;
    }
    else if(!isset($pass) || $pass == '') {
        return  'Please enter a valid password' //return false;
    }
    else {
        return true;
    }
}

所以我可以像if(check_login($uname, $pword)){一样检查,而不是像if(check_login($uname, $pword)=='true'){那样检查:)

6 个答案:

答案 0 :(得分:12)

为什么不检查它是否为true,并从那里处理。

$login = check_login('user', 'pass');

if($login === true)
    loginUser(); //login was successful, finalize or whatever
else
    echo $login; //error message

答案 1 :(得分:9)

您可以使用的另一种方法是在类中设置错误消息并调用函数以便稍后获取它。

  class exampleClass {
        private $error_message = '';

        function exampleFunction($argument) {

            if($argument == 'lemons') {
                return true;
            } else {
                $this->error_message = 'Argument was not lemons.';
                return false;
            }

        }

        function getErrorMessage() {
            return $this->error_message;
        }

    }

    $example_session = new exampleClass();

    if( ! $example_session->exampleFunction('apples') )
        echo $example_session->getErrorMessage();

答案 2 :(得分:4)

为什么不尝试抛出异常

function check_login($user, $pass) {
    if (empty($user)) {
        throw new InvalidArgumentException('Please enter a valid username');
    }
    if (empty($pass)) {
        throw new InvalidArgumentException('Please enter a valid password');
    }
    return true
}

// snip

try {
    check_login($userValue, $passValue);
} catch (Exception $e) {
    // an error occurred
    echo $e->getMessage();
}

答案 3 :(得分:4)

我知道这是一篇很老的帖子,但它得到了很多评论。所以,让我在这里为这些伟大的答案添加另一个答案。

一种解决方案是通过引用传递变量,如PHP样式。 Example


伪码:

功能

 //Notice the '&' before the variable name. 
function check_login($user, $pass, &$message) {
    if(!isset($user) || $user == '') {
        $message["status"] = false;  //fail
        $message["message"] ='Please enter a valid username';
    }
    elseif(!isset($pass) || $pass == '') {
           $message["status"] = false;  //fail   
           $message["message"]=  'Please enter a valid password';
    }
    elseif (isset($pass) || $pass != ''){
         $message["status"] = true; //success
         $message["message"]=  'Username and password are valid';
        return true;
    }

    return false;//you can return from within the if condition if you wish
}

电话:

/* $message variable will be assigned and populated in the function check_login() */

$message = array();

    if(check_login($uname, $pword, $message) === true )
    {
       //Do your stuff here
      //@message array is avaialble 
       echo message["message"];
    }
    else
    {
     //means false
     echo message["message"];
    }

答案 4 :(得分:0)

您可以使用echo并返回两者:

function check_login($user, $pass) {
    if(!isset($user) || $user == '') {
    echo "Please enter a valid username";
        return false;
    }
    else if(!isset($pass) || $pass == '') {
    echo "Please enter a valid password";
        return false;
    }
    else {
        return true;
    }
}

答案 5 :(得分:0)

你可以使用变量代替echo或return比echo更安全 - 假设你想在html标题中运行这个函数,甚至在此之前 - 你会看到甚至在之前生成的文本网站已加载。

使用变量代替!

    function check_login($user, $pass) {
            if(!isset($user) || $user == '') {
            $var = "Please enter a valid username";
$var = array();
    $var['msg'] = "Please enter a valid username";
    $var['error'] = "false";
    return $var;

            }
            else if(!isset($pass) || $pass == '') {
            $var = array();
    $var['msg'] = "Please enter a valid username";
    $var['error'] = "false";
    return $var;
            }
            else {
                return true;
            }
        }

这就是你现在可以同时使用两者的方式,你想要显示错误的地方使用变量以及你想要检查语句的地方,用真和假检查它。

如果您想使用带有错误消息的$ var变量,请使用此 -

echo $var['msg'];

当你想检查错误时使用

$var['error'] == 'false'