PHP 类函数忽略返回语句


PHP Class Function Ignores Return Statement

由于某种原因,当 check_em() 成功时返回不起作用。我是 php 的新手,所以我在这里不知所措。

<?php
//Class to handle mysql
class db_handler {
    private $db_host = 'localhost';
    private $db_name = 'project';
    private $db_user = 'project';
    private $db_pass = 'dbpassword';
    private $db_con_mysql = '';
    private $db_con_db = '';
    public function check_em($username, $password) {
        $db_query = "SELECT password FROM user WHERE name='".$username."' LIMIT 1;";
        if($this->db_con_mysql!='') {
            $db_query_response = mysql_query($db_query) or die('Query failed: '.mysql_error());
            $db_query_return = mysql_fetch_row($db_query_response);
            $db_sha1_hash = $db_query_return[0];
            echo $db_sha1_hash."<br>";
            echo sha1($password)."<br>";
            if(sha1($password)==$db_sha1_hash) {
                return 'user valid'; //THIS DOESN'T WORK!?!?!?
            } else {
                return 'no good';
            }
        } else {
            $this->db_connect();
            $this->check_em($username, $password);
        }
    }
    //Connect to mysql, then database
    private function db_connect() {
        $this->db_con_mysql = mysql_connect($this->db_host, $this->db_user, $this->db_pass) || die('Connection failed: '.mysql_error());
        $this->db_con_db = mysql_select_db($this->db_name) || die('Could not use'.$this->db_name.'. '.mysql_error());
        return;
    }
    //Disconnect from database and reset vars used to track connection.
    private function db_disconnect() {
        if($this->db_con_mysql!='') {
            mysql_close();
            $this->db_con_mysql = '';
            $this->db_con_db = '';
            return;
        }
    }
    public function fake($some_val) {
        if($some_val<6) {
            return TRUE;
        } else {
            return FALSE;
        }
    }
}
$db_obj = new db_handler();
$val1 = $db_obj->check_em('someuser','password'); //should return 'user valid'
echo "val1:".$val1."<br>";
echo "<br><br>";
$val2 = $db_obj->check_em('someuser','passw0rd'); //should return 'no good'
echo "val2:".$val2."<br>";
echo "<br><br>";
echo "test<br>";
echo $db_obj->fake(4)."<br>";
?>

结果:

5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
val1:

5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
7c6a61c68ef8b9b6b061b28c348bc1ed7921cb53
val2:no good

test
1

此行需要返回:

return $this->check_em($username, $password);

但是更明智的解决方案是在连接null时连接到if内的数据库。真的,整个事情可以写得更好,但我会把它留在那里。

...
else {
            $this->db_connect();
            return $this->check_em($username, $password);
        }
...

您希望添加返回,以便如果它失败,那么它会更深一层并找到另一层。如果该级别更深,它将值向上传递到上面的级别,该级别可以向上传递它,直到到达原始函数调用。