Да, PDO в значительной степени является "эквивалентом" JDBC, но в PHP.
Вы должны передать экземпляр PDO в конструктор объектов вашего домена (внедрение зависимости):
abstract class Object {
protected $_pdo;
protected $_target;
public function __construct(PDO $pdo) {
$this->_pdo = $pdo;
}
public function load($id) {
// $this->_pdo->something()
}
public function save() {
// $this->_pdo->something()
}
public function delete() {
// $this->_pdo->something()
}
}
class User extends Object {
protected $_target = 'user_table';
public $name;
}
Тогда:
$pdo = new PDO('mysql:dbname=foobar');
$user = new User($pdo);
$user->name = 'netcoder';
$user->save();
Вы также можете добавить статический метод в Object
, чтобы указать экземпляр по умолчанию:
class Object {
// ...
static protected $_defaultPDO;
static public function setDefaultPDO(PDO $pdo) {
self::$_defaultPDO = $pdo;
}
public function __construct(PDO $pdo = null) {
if (!isset($pdo)) $pdo = self::$_defaultPDO;
if (!isset($pdo))
throw new DomainException('No default PDO object defined');
$this->_pdo = $pdo;
}
}
Object::setDefaultPDO(new PDO('mysql:dbname=foobar'));
$user = new User;
$user->name = 'James P.';
$user->save();