Fatal error: Uncaught Error: Class 'my\own\classes\PDO' not found --- 命名空間與Global自帶類

錯誤提示

Fatal error: Uncaught Error: Class 'my\own\classes\PDO' not found

 

原因

在命名空間裏,class_exists('PDO') 或者 new PDO(),都是指向本命名空間的PDO類

例如“\my\own\classes\PDO”,所以,我們需要提前把頂級的自帶的PDO類給加載進來,例如:

<?php

    namespace my\own\classes;
    use \PDO;

注意:PDO前的斜槓,代表這個類是在頂級目錄的。(命名空間其實就是目錄形式)

 

報錯的代碼:

<?php

    namespace my\own\classes;
    
    class my_pdo {    
        public $dbh = NULL;
        public function __construct () {
            
        }
        
        public function db_connect () {
            if ($this->dbh == NULL) {
                if (!class_exists('PDO')) {
                    die('Module PDO is required.');
                }
                try {
                    $this->dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'pwd');                 
                } catch (PDOException $e) {
                    die('Connection failed: '.$e->getMessage());
                }
            }
        }
        
        public function query_sql ($sql) {
            $this->db_connect();
            return $this->dbh->query( $sql )->fetchAll( PDO::FETCH_ASSOC );
        }
        
        public function db_close () {
            if ($this->dbh != NULL) {
                $this->dbh = NULL;
            }
        }
    }
    
    
    $obj = new \my\own\classes\my_pdo();
    $sql = "select * from settings";
    print_r($obj->query_sql( $sql ));
    
    

 

正確的代碼:

<?php

    namespace my\own\classes;
    use \PDO;
    
    class my_pdo {    
        public $dbh = NULL;
        public function __construct () {
            
        }
        
        public function db_connect () {
            if ($this->dbh == NULL) {
                if (!class_exists('\\PDO')) {
                    die('Module PDO is required.');
                }
                try {
                    $this->dbh = new \PDO('mysql:host=localhost;dbname=mintmultybase', 'root', 'root');                 
                } catch (PDOException $e) {
                    die('Connection failed: '.$e->getMessage());
                }
            }
        }
        
        public function query_sql ($sql) {
            $this->db_connect();
            return $this->dbh->query( $sql )->fetchAll( PDO::FETCH_ASSOC );
        }
        
        public function db_close () {
            if ($this->dbh != NULL) {
                $this->dbh = NULL;
            }
        }
    }
    
    
    
    $obj = new \my\own\classes\my_pdo();
    
    $sql = "select * from settings";
    print_r($obj->query_sql( $sql ));
    
    

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章