PHP-将PDO连接传递给所有函数
我有一个try-catch块,它通过PDO连接到数据库。我希望能够在所有函数中引用它,而不必将其作为参数传递。我该怎么做?上述代码是:PHP-将PDO连接传递给所有函数,php,pdo,Php,Pdo,我有一个try-catch块,它通过PDO连接到数据库。我希望能够在所有函数中引用它,而不必将其作为参数传递。我该怎么做?上述代码是: try { $database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root',''); $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e) {
try {
$database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e) {
echo $e->getmessage();
die();
}
编辑:
我创建了一个单例类(尝试如下),它在\u构造时执行try-catch块
final class database {
private static $instance = NULL;
private function __construct() {
try {
$database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo $e->getmessage();
die();
}
}
public static function getInstance() {
static $instance = null;
if (self::$instance === NULL) {
$instance = new database();
}
return $instance;
}
}
将其声明为singleten类的静态属性。你可以用它来访问它
$pdo = Singleton::instance()->getConnection();
或者,我可以建议看一看MArtin Fowler的关系数据库映射模式。它比集中连接本身更进一步
或者,Doctirne项目有一个完整的实现:www.doctor-project.org
final class database {
private static $instance = NULL;
private $pdo; //added private variable for pdo
private function __construct() {
try {
$database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo $e->getmessage();
die();
}
$this->pdo = $database; //saved the connection into the new variable
}
public static function getInstance() {
static $instance = null;
if (self::$instance === NULL) {
$instance = new database();
}
return $instance;
}
//added a function to get the connection itself
function getConnection(){
return $this->pdo;
}
}
所以现在你使用它:
$pdo = database::getInstance()->getConnection();
将其声明为singleten类的静态属性。你可以用它来访问它
$pdo = Singleton::instance()->getConnection();
或者,我可以建议看一看MArtin Fowler的关系数据库映射模式。它比集中连接本身更进一步
或者,Doctirne项目有一个完整的实现:www.doctor-project.org
final class database {
private static $instance = NULL;
private $pdo; //added private variable for pdo
private function __construct() {
try {
$database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo $e->getmessage();
die();
}
$this->pdo = $database; //saved the connection into the new variable
}
public static function getInstance() {
static $instance = null;
if (self::$instance === NULL) {
$instance = new database();
}
return $instance;
}
//added a function to get the connection itself
function getConnection(){
return $this->pdo;
}
}
所以现在你使用它:
$pdo = database::getInstance()->getConnection();
将其声明为singleten类的静态属性。你可以用它来访问它
$pdo = Singleton::instance()->getConnection();
或者,我可以建议看一看MArtin Fowler的关系数据库映射模式。它比集中连接本身更进一步
或者,Doctirne项目有一个完整的实现:www.doctor-project.org
final class database {
private static $instance = NULL;
private $pdo; //added private variable for pdo
private function __construct() {
try {
$database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo $e->getmessage();
die();
}
$this->pdo = $database; //saved the connection into the new variable
}
public static function getInstance() {
static $instance = null;
if (self::$instance === NULL) {
$instance = new database();
}
return $instance;
}
//added a function to get the connection itself
function getConnection(){
return $this->pdo;
}
}
所以现在你使用它:
$pdo = database::getInstance()->getConnection();
将其声明为singleten类的静态属性。你可以用它来访问它
$pdo = Singleton::instance()->getConnection();
或者,我可以建议看一看MArtin Fowler的关系数据库映射模式。它比集中连接本身更进一步
或者,Doctirne项目有一个完整的实现:www.doctor-project.org
final class database {
private static $instance = NULL;
private $pdo; //added private variable for pdo
private function __construct() {
try {
$database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo $e->getmessage();
die();
}
$this->pdo = $database; //saved the connection into the new variable
}
public static function getInstance() {
static $instance = null;
if (self::$instance === NULL) {
$instance = new database();
}
return $instance;
}
//added a function to get the connection itself
function getConnection(){
return $this->pdo;
}
}
所以现在你使用它:
$pdo = database::getInstance()->getConnection();
我不会推荐它,但我不会做一个全球性的决定。类是可移植的代码单元。如果您使用该类而不将这些全局设置在外部,会发生什么情况?我不建议这样做,但我不会创建全局设置。类是可移植的代码单元。如果您使用该类而不将这些全局设置在外部,会发生什么情况?我不建议这样做,但我不会创建全局设置。类是可移植的代码单元。如果您使用该类而不将这些全局设置在外部,会发生什么情况?我不建议这样做,但我不会创建全局设置。类是可移植的代码单元。如果使用该类而不在外部设置这些全局值,会发生什么情况?我创建了singleton块(请参阅编辑的文章),并创建了一个实例:$db=database::getInstance()
,但当我在函数中引用$db
时,它在作用域中仍然无法识别。我做错了什么?您返回的是对singleton类itselsf(实例变量)的引用,而不是连接。请稍等,我也会添加一个编辑!因为我必须返回在那个实例中我需要的东西,在这个例子中是PDO。谢谢:)有没有一种快速的方法可以让我不必使用$pdo=database::getInstance()->getConnection()代码>在每个函数中?我读到,把它当作一个全局是不好的做法,你可以把它当作一个全局。之所以认为使用globals是一种不好的做法,是因为它们很容易被覆盖,而且随着项目的不断发展,您将需要越来越多的globals。容易犯错误。我通常只在配置设置中使用globals(如果您曾经使用过joomla,那么基本的joomla配置是由globals构建的)。因此,您不能简单地声明它是好是坏,但通常从长远来看,如果您计划进行持续开发,将代码粒子封装到类中是值得的。我提到的这本书读起来很好(不容易),也许可以看看itI创建了singleton块(参见编辑的文章),并创建了一个实例:$db=database::getInstance()
,但当我在函数中引用$db
时,它在作用域中仍然无法识别。我做错了什么?您返回的是对singleton类itselsf(实例变量)的引用,而不是连接。请稍等,我也会添加一个编辑!因为我必须返回在那个实例中我需要的东西,在这个例子中是PDO。谢谢:)有没有一种快速的方法可以让我不必使用$pdo=database::getInstance()->getConnection()代码>在每个函数中?我读到,把它当作一个全局是不好的做法,你可以把它当作一个全局。之所以认为使用globals是一种不好的做法,是因为它们很容易被覆盖,而且随着项目的不断发展,您将需要越来越多的globals。容易犯错误。我通常只在配置设置中使用globals(如果您曾经使用过joomla,那么基本的joomla配置是由globals构建的)。因此,您不能简单地声明它是好是坏,但通常从长远来看,如果您计划进行持续开发,将代码粒子封装到类中是值得的。我提到的这本书读起来很好(不容易),也许可以看看itI创建了singleton块(参见编辑的文章),并创建了一个实例:$db=database::getInstance()
,但当我在函数中引用$db
时,它在作用域中仍然无法识别。我做错了什么?您返回的是对singleton类itselsf(实例变量)的引用,而不是连接。请稍等,我也会添加一个编辑!因为我必须返回在那个实例中我需要的东西,在这个例子中是PDO。谢谢:)有没有一种快速的方法可以让我不必使用$pdo=database::getInstance()->getConnection()代码>在每个函数中?我读到,把它当作一个全局是不好的做法,你可以把它当作一个全局。使用globals被认为是一种不好的做法的原因是