Php 扩展PDO类时出错
在这段代码中,我尝试扩展PDOPhp 扩展PDO类时出错,php,Php,在这段代码中,我尝试扩展PDO class mypdo extends PDO{ static public $db = null; public function __construct($dsn, $username=false, $password=false){ if(self::$db==null){ try { self::$db = parent::__constru
class mypdo extends PDO{
static public $db = null;
public function __construct($dsn, $username=false, $password=false){
if(self::$db==null){
try {
self::$db = parent::__construct($dsn, $username, $password);
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>");
}
}
return self::$db;
}
}
setAttribute()
是PDO对象的方法,为什么会出现此错误
当我将这个方法添加到类中时,我的PDO
public function lastInsertId($name) {
return self::$db->lastInsertId($name);
}
如果我尝试调用它,我会收到相同的错误消息
我认为正确的代码是
class mypdo extends PDO{
static public $db = null;
public function __construct($dsn, $username=false, $password=false){
if(self::$db==null){
try {
parent::__construct($dsn, $username, $password);
parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>");
}
}
return self::$db;
}
public function runSQL($SQL) {
return parent::exec($SQL);
}
public function lastInsertId($name) {
return parent::lastInsertId($name);
}
}
类mypdo扩展了PDO{
静态公共$db=null;
公共函数构造($dsn,$username=false,$password=false){
if(self::$db==null){
试试{
父项::_构造($dsn,$username,$password);
父::setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
}捕获(PDO$e){
die(“PDO连接错误:“.e->getMessage()”); } } 返回self::$db; } 公共函数runSQL($SQL){ 返回parent::exec($SQL); } 公共函数lastInsertId($name){ 返回父项::lastInsertId($name); } }
在PHP中,对象构造函数(在本例中为
PDO
)通常不返回值
当您执行以下操作时:
self::$db = parent::__construct($dsn, $username, $password);
parent::__construct($dsn, $username, $password);
self::$db = $this;
如果PDO
构造函数(parent::u construct()
)未返回值,则将self::$db
设置为null
-值。这就是为什么在非对象上收到错误“调用成员函数setAttribute()
”,因为null
不是对象
要进行测试,您可以尝试以下操作:
self::$db = parent::__construct($dsn, $username, $password);
parent::__construct($dsn, $username, $password);
self::$db = $this;
这将调用父对象的构造函数,然后将
self::$db
引用设置为当前实例。在PHP中,对象构造函数通常不返回值,在本例中为PDO
当您执行以下操作时:
self::$db = parent::__construct($dsn, $username, $password);
parent::__construct($dsn, $username, $password);
self::$db = $this;
如果PDO
构造函数(parent::u construct()
)未返回值,则将self::$db
设置为null
-值。这就是为什么在非对象上收到错误“调用成员函数setAttribute()
”,因为null
不是对象
要进行测试,您可以尝试以下操作:
self::$db = parent::__construct($dsn, $username, $password);
parent::__construct($dsn, $username, $password);
self::$db = $this;
这将调用父级的构造函数,然后将
self:$db
引用设置为当前实例。尝试self:$db=new-PDO($dsn,$username,$password);而不是self::$db=parent::u构造($dsn,$username,$password);Try self::$db=new PDO($dsn,$username,$password);而不是self::$db=parent::u构造($dsn,$username,$password);你能告诉我self:$db=parent::u构造($dsn,$username,$password)之间的区别吗如果我尝试self:$db=parent::u构造($dsn,$username,$password,array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));你能告诉我self:$db=parent::u构造($dsn,$username,$password)之间的区别吗如果我尝试self:$db=parent::u构造($dsn,$username,$password,array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));