【问题标题】:how to access connection variable with in another file [duplicate]如何在另一个文件中访问连接变量[重复]
【发布时间】:2012-06-17 05:45:29
【问题描述】:

可能重复:
Global or Singleton for database connection?

我在 database.php 中有一个数据库类,然后在同一个文件上创建一个对象; $database = new Database(); 然后我将这个文件包含到另一个文件中——这个文件有一个名为Test 的类在Test 类中有一个方法test_me。 在 test_me 方法中,我想访问 Database 类的 $connection 变量。我该怎么做?

这是我尝试过的;

function test_me(){
  global $connection;
  //use $connection on another function..
}

这给了我一个错误 undefined variable $connection 。知道我做错了什么吗?

【问题讨论】:

  • 有些人使用singletons,有些人使用依赖注入。您还可以查看持久连接。
  • 您也可以尝试$GLOBALS['connection'],但我会认真重新考虑您的代码结构。您还可以使用dbconn() 函数,该函数返回一个静态声明的$connection 变量并在您的函数中使用它(有点?singleton pattern)。但是带有一些代码封装的 DI 是我对最佳实践的建议。

标签: php database global-variables undefined


【解决方案1】:

如果你将$connection声明为全局变量,你的代码就ok了。

但最好避免使用全局变量。您可以在 Test 类中设置连接。

一个例子是:

class Test {

  protected $connection;

  public function setConnection($connection) {
    $this->connection = $connection;
  }

  function test_me () {
    // use $this->connection.
    //...
  }
}

【讨论】:

  • 依赖注入——如果你的代码组织良好,这可能是最好的方法。
  • @JaredFarrish 是的,DI 很容易测试。
  • 你知道,我从来没有弄清楚,但有时global $var 没有正确导入。因此,如有必要,我使用$GLOBALS['var']。任何 cmets 都对这种方法的有效性表示赞赏。
  • 嗨,由于某种原因,我的代码不正常,我在另一个项目上做了同样的事情并且它有效。但是这个找不到$connection。但是我也尝试了你的方法,它没有用 - 仍然不能很好$connection。你确定在我的文件上使用这个编码部分可以解决这个问题吗?还是我必须编辑其他东西? $connection 是数据库连接,它应该在 Database 类中。
  • @guitarlass 如果你设置正确的连接,我的代码就可以了。
【解决方案2】:

有几种方法可以实现,简单的应该是这样的

function test_me()
{
    global $database;

    echo $database->connection; // or do whatever you want with it
}

【讨论】:

  • 这已经在问题中了。我认为 OP 想知道它为什么不起作用。
猜你喜欢
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多