Php PDO使用类连接到db
我正在做一个PDO系统,遇到了一个问题。我将为我的代码、用户、产品等创建多个类,我想知道它们之间的联系。我在我的一个班级里有这样的课程:Php PDO使用类连接到db,php,mysql,pdo,Php,Mysql,Pdo,我正在做一个PDO系统,遇到了一个问题。我将为我的代码、用户、产品等创建多个类,我想知道它们之间的联系。我在我的一个班级里有这样的课程: class Database { private $_db; function __construct($db) { $this->_db = $db; } } $db来自一个配置文件,我还在其中加载所有类。现在的问题是: 我必须在所有类中创建相同的函数,还是可以让我的“数据库”类为所有类工作?
class Database
{
private $_db;
function __construct($db)
{
$this->_db = $db;
}
}
$db
来自一个配置文件,我还在其中加载所有类。现在的问题是:
我必须在所有类中创建相同的函数,还是可以让我的“数据库”类为所有类工作?不,不必为每个类反复()创建相同的函数。这使得维护应用程序非常困难
请尝试以下方法之一:
1.依赖注入
您可以使用依赖项注入来实现这一点。这是非常情境化的,可能不是你想要的,但我想我还是把它放在这里
假设如下:
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);
2.独生子女
您可以将数据库类设为单例,然后静态调用它。这可能更符合你的需要
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();
希望这能有所帮助。我想说,这是一个你想了解更多的基本概念。它被称为,而你正在寻找的可能是一个你的问题的答案是:不,你不必在所有的类中创建相同的函数。是的,你可以让你的数据库类“为”你所有的数据库类工作(这些类就是数据库类,总是这样,请看)。@hakre告诉他如何在我需要放入扩展数据库的其他类中执行itSo,我还需要什么呢?@hakre听起来像是Laravel的雄辩的@JensJørgen:你可以做更多的事情,但从技术上讲,这个概念已经从数据库类扩展到了——正如你写的那样!在企业应用程序架构模式的第10章中可以找到一整套与数据库相关的示例。这不是PHP代码,而是大部分可以映射到PHP代码的概念,不需要任何单例。您可以只使用全局变量。也就是说,最好使用依赖注入。我想知道,到2014年底,单身汉仍然会被推荐。您只需要一个超级静态:(我的数据库类中出现以下错误:
Catchable致命错误:传递到数据库的参数1::\u construct()必须是PDO的实例,未给定。
我还需要添加$user=new user($db)
在用户类中,或者我可以将其添加到配置文件中吗?您使用哪种方法?因此,如果我复制您编写的所有内容,它应该可以正常工作?@JensJørgen,但您最好根据需要编写它。