微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

致命错误:在 php oop

如何解决致命错误:在 php oop

现在我学会了使用 OOP 概念创建 PHP crud 操作

在这代码中我遇到了一些问题

配置文件

<?PHP
class Database{
    private $dbHost     = "localhost";
    private $dbUsername = "root";
    private $dbPassword = "";
    private $dbname     = "xtratuition";
    public $db;
    
    public function __construct(){
        if(!isset($this->db)){
            try{
                $conn = new PDO("MysqL:host=".$this->dbHost.";dbname=".$this->dbname,$this->dbUsername,$this->dbPassword);
                $conn -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
                $this->db = $conn;
            }
            catch(PDOException $e){
                die("Failed to connect with MysqL: " . $e->getMessage());
            }
            return $this->db;
        }
    }
}
?>

Modules.PHP

<?PHP
include_once("config.PHP");

class CrudController extends Database{
    function sqlSelect($TblName,$Condition){
        try{
            $query = "SELECT * FROM `xtratuition`.$TblName WHERE $Condition";
            $result = $this->db->prepare($query);
            $result->execute();
            $data = array();
            while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
                $data[] = $row;
            }
            return $data;
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }
}
class LoginController extends CrudController{
    public $emailID;
    function __construct($email){
        $this->emailID = $email;
    }
    function userLogin(){
        $data = $this->sqlSelect("users","email = '".$this->emailID."'");
        return $data;
    }
}

// This is works well

// $login = new CrudController();
// $data = $login->sqlSelect("`users`","email = 'klakshmanan48@gmail.com'");
// print_r($data);


$login = new LoginController("klakshmanan48@gmail.com");
$data = $login->userLogin();
print_r($data);


?>

我想我在这代码中犯了一个错误。 我收到此错误

致命错误:在 null 上调用成员函数 prepare()

在这条线上

$result = $this->db->prepare($query);

解决方法

如果您在子类中定义构造函数,则必须显式调用父构造函数,它们不会自动调用。

您必须在 LoginContoller 类中调用 parent 构造

class LoginController extends CrudController{
    public $emailID;
    function __construct($email){
        $this->emailID = $email;
        parent::__construct(); //explicit call to parent constructor
    }
    function userLogin(){
        $data = $this->sqlSelect("users","email = '".$this->emailID."'");
        return $data;
    }
}     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。