在非对象上调用成员函数

时间:2013-09-21 05:42:04

标签: php oop

我正在尝试学习OOP,目前正在重写使用登录。我一直收到错误说:

Fatal error: Call to a member function prepare() on a non-object in /var/www/new.php on line 22

有人可以指出我做错了什么吗?除了明显的错误之外,这看起来像是一个好的OOP编码实践吗?

<?php  
ini_set('display_errors', TRUE);
require 'resources/library/DB.php';

    class DataBase
    {
        private $conn = null;

        public function __construct($conn)
        {
            $this->conn = $conn;
        }

            public function setConn($conn)
        {
            $this->conn = $conn;
            return $this;
        }

       public function retrievePassword($userNAme) 
       {
       $stmt = $this->conn->prepare('SELECT `password` FROM `users` WHERE `userName`= :userName');
       $stmt->bindValue(':userName', $userNAme);
       $stmt->execute();
       $salt = $stmt->fetchColumn();

       return $salt;
}
        }
    $db = new DataBase($conn);
    echo $db->retrievePassword('testuser');

?>  

2 个答案:

答案 0 :(得分:3)

您的构造函数不正确。

正确的PHP构造函数是

__构建体。

因此,当您调用新数据库($ pdo)时,它使用默认构造函数 - 它不进行赋值。

答案 1 :(得分:0)

您没有将 $conn 传递给 retrievePassword()

所以它可能不知道 conn 是什么。