我无法使用我自己的pdo_connection
类中的PDO类方法,无论是否有extends PDO
,它都无法正常工作。
Class pdo_connection {
//connection create
private $dbhost = "127.0.0.1";
private $dbname = "db";
private $dbuser = "user";
private $dbpass = "pass";
public function __construct() {
return $db = new PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
}
}
然后当我创建对象时:
require("api/pdo.connection.class.php");
$db = new pdo_connection();
$db->exec("SET NAMES utf8");
我不能使用exec,因为它不是pdo_connection类的方法,但是我想使用在pdo_connection
类中创建的PDO方法。
答案 0 :(得分:4)
如果您希望能够像这样使用pdo_connection
,则必须扩展PDO。
示例:
class db extends PDO {
然后,在该课程的__construct
内,使用parent::__construct
:
parent::__construct('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
这是我使用该方法制作的课程: [link]
用法:
include_once 'db.php';
$db = new db('user');
// Do stuff with $db
答案 1 :(得分:3)
任何构造函数的返回类型都应为void
。您使用构造函数初始化对象属性。致电new ClassName()
时的返回值将为ClassName
类型。
话虽如此,如果你想扩展课程PDO
,你可以这样做:
class pdo_connection extends PDO { ... }
但是,我个人不会这样做。事实上,快速搜索引导我阅读这篇文章:
请记住,我从未亲自尝试来扩展PDO,所以请考虑这一点。
相反,为什么不将PDO对象存储为类属性,然后定义自己的与PDO对象交互的函数?
Class pdo_connection {
//connection create
private $dbhost = "127.0.0.1";
private $dbname = "db";
private $dbuser = "user";
private $dbpass = "pass";
public function __construct() {
try { // Don't forget this....
$this->db = new PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
} catch(PDOException $e) { }
}
public function exec() {
/// do your exec stuff here
}
}
答案 2 :(得分:3)
class
中包装代码并将其称为OOP是不够的。
class MyPdo
{
protected $db;
protected $dbhost = '127.0.0.1';
protected $dbname = 'db';
protected $dbuser = 'user';
protected $dbpass = 'pass';
protected function __construct()
{
$this->db = PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
}
public function __call($method, $args)
{
return call_user_func_array(array($this->db, $method), $args);
}
}