这是我的index.php
<?
require("Annonce.php");
$annonce = new Annonce();
$annonce->id=1;
$annonce->delete();
?>
我的Annonce.php是!
<?php
require("DB.php");
class Annonce extends DB {
}
?>
最后DB是:
<?php
$db = new PDO('mysql:host=localhost;dbname=annonces;charset=utf8', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
class DB {
public static $debug = true;
function __construct() {
# code...
}
function delete() {
$id = $this->id;
$table = get_class($this);
$sql="delete from $table where id=$id";
if ($this::$debug) echo $sql;
}
function get() {
$sql="select *...";
}
}
?>
我不知道定义$ db连接的最佳策略是什么?
如果我在DB类中定义它,它将在创建“Annonce”对象时建立连接。也许使用$ db作为GLOBAL(我认为不干净)
对此有何建议?
答案 0 :(得分:1)
创建一个Singleton,有点像这样:
class DB
{
private $_db;
private $_instance;
private function __construct()
{
$this->_db = $db = new PDO('mysql:host=localhost;dbname=annonces;charset=utf8', 'root', '');
}
public static function getInstance()
{
if(!(self::$_instance instanceof DataBase)){
$c = __CLASS__;
self::$_instance = new $c;
}
return self::$_instance;
}
//.....other code
}
使用它:
$db = DB::getInstance();
答案 1 :(得分:0)
您可以将连接定义为服务,并使用依赖性伤害容器(DIC)通过提供依赖性注入容器为任何其他需要它的功能/模块/类提供连接。疙瘩是“为我们带来Symfony的人们的simple DIC Solution”。
无论如何,拥有DIC是一个好主意。
对于你的问题,这可能看起来“超过顶部”(因为Singleton会完全解决你的问题),但考虑到DIC会更多地改善你的工作。你要求一个干净的解决方案。如果您不使用单元测试,单身人士设计模式将是干净的,因为单身人士将get you into trouble with mocking。