我正在制作PDO系统并遇到问题/疑问。我会为我的代码,用户,产品等制作多个课程。我想知道连接。我在我的一个课程中有这个:
class Database
{
private $_db;
function __construct($db)
{
$this->_db = $db;
}
}
$db
来自配置文件,我也加载了所有类。现在的问题是:
我是否必须在所有类中创建相同的函数,或者我可以只使用适用于我所有类的“数据库”类?
答案 0 :(得分:0)
不,你不必(and shouldn't)为每个班级反复创建相同的功能。这使得维护您的应用程序非常困难。
请尝试以下方法之一:
您可以使用依赖注入来执行此操作。这是非常情绪化的,可能不是你想要的,但我还是认为我还是把它放在这里。
假设如下:
class Database
{
/**
* @var PDO
*/
private $db;
public function __construct(PDO $db)
{
$this->db = $db;
}
}
class User
{
/**
* @var Database
*/
private $db;
// Here we inject a Database object (as hinted by Database $db) into the current instance
public function __construct(Database $db)
{
$this->db = $db
}
}
try
{
$pdo = new PDO(...);
$db = new Database($pdo);
}
catch(PDOException $ex)
{
// Could not connect to database or some other error message
}
// Inject $db in the user class
$user = new User($db);
您可以将数据库类设为单例,然后静态调用它。这可能更符合您的需求。
class Database
{
/**
* @var Database
*/
private static $instance;
/**
* @var PDO
*/
private $db;
protected function __construct(PDO $db)
{
$this->db = $db;
}
// You'd call this in your config
public static function initialize(PDO $db)
{
if(self::$instance == null)
{
// Create a new instance of this class
self::$instance = new self($db);
}
}
// Get the instance
public static function getInstance()
{
return self::$instance;
}
// Do something
public function doSomething()
{
// Do something
echo "Foo";
}
}
class User
{
public function doSomething()
{
// This would print "Foo"
Database::instance()->doSomething();
}
}
try
{
$db = new PDO(...);
}
catch(PDOException $ex)
{
// Could not connect to database or some other error message
}
Database::initialize($db);
$user = new User();
希望这有帮助。