錯誤提示
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 ));