Php 在slim框架中使用PDO的方法是什么?

Php 在slim框架中使用PDO的方法是什么?,php,pdo,slim,Php,Pdo,Slim,我开始了一个新的slim项目,支持twig,我想使用PDO作为数据库层,集成的方式是什么?还是只使用全局$db 谢谢。我反对可变全局变量。您可以使用简单的工厂方法返回连接: function db() { static $db = null; if (null === $db) $db = new PDO(...); return $db; } 如果你要处理更多这样的问题,请考虑注册表(见)。 关于可变全局变量: 我反对这些东西,因为它们很容易变异。 如果在程序流程中,情况

我开始了一个新的slim项目,支持twig,我想使用PDO作为数据库层,集成的方式是什么?还是只使用全局$db


谢谢。

我反对可变全局变量。您可以使用简单的工厂方法返回连接:

function db() {
  static $db = null;
  if (null === $db)
    $db = new PDO(...);
  return $db;
}

如果你要处理更多这样的问题,请考虑注册表(见)。 关于可变全局变量:

我反对这些东西,因为它们很容易变异。
如果在程序流程中,情况发生意外变化,会发生什么情况?
事情破裂了

如果你是唯一一个参与该项目的人,globals可能还可以。
但根据我的经验,即使在这种情况下,跟踪全局变量也会成为一件麻烦事,并且会破坏代码的逻辑组织。
如果您要与其他人共享您的代码,而其他人将覆盖这些全局代码,该怎么办

此外,globals与在上下文中使用的方法相矛盾

所有这些都涉及到软件架构这门大而广的科学

此外,在这种特定情况下使用工厂可以确保只保留一个对数据库连接的引用。

查看此项目:(github)

文件

通过composer安装:
$composer需要slim/pdo

简单用法:

$app->container->singleton('database',function()使用($app){
返回新的\Slim\PDO\Database($app->config('db.dsn'),$app->config('db.usr'),$app->config('db.pwd');
});
//从id=?的用户中选择*?
$selectStatement=$app->database->select()
->来自('用户')
->其中('id','=',1234);
$stmt=$selectStatement->execute();
$data=$stmt->fetch();
//在用户(id、usr、pwd)中插入值(?,?)
$insertStatement=$app->database->insert(数组('id','usr','pwd'))
->进入('用户')
->值(数组(1234,‘您的_用户名’、‘您的_密码’);
$insertId=$insertStatement->execute(false);

我经常这样做。虽然这不是正确的做事方式,但就OOP而言,这很容易。当然,在将代码与可能使用相同变量名的其他库混合时,需要非常小心。请参阅glasz的答案,了解正确的方法。很好的参考资料。你能解释一下为什么你反对可变全局变量吗?:)@Wolfpack'08在上面添加了更多关于我在globals上的位置。$sth=$this->db->prepare($sql)$执行某事物$筒仓=$sth->fetchAll()$sth=null;我的PDO对象将被
$sth=null关闭?@AbelJojo基本上是的。详细说明。