2012-06-17 46 views
-1

可能重复:
Global or Singleton for database connection?如何与访问连接变量在另一个文件

我有在database.php中一个数据库类然后在相同的文件创建对象; $database = new Database(); 然后我把这个文件包含到另一个文件中 - 这个文件有一个名为Test的类,里面的类Test有一个方法test_me。 里面test_me方法我想访问数据库类的$连接变量。我怎样才能做到这一点?

这是我试过的;

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

这给了我一个错误undefined variable $connection。任何想法我做错了什么?

+0

有些人用'singleton's,其他人使用依赖注入。你也可以看看持久连接。 –

+0

你也可以试试'$ GLOBALS ['connection']',但我会认真反思你的代码的结构。你也可以使用一个'dbconn()'函数,它返回一个静态声明的'$ connection'变量,并在你的函数中使用它(有点?['singleton' pattern](http://stackoverflow.com/questions/130878/)全球有或单换数据库连接))。但是有一些代码封装的DI是我对最佳实践的建议。 –

回答

0

有实现这一目标的几种方法,简单的东西应该像

function test_me() 
{ 
    global $database; 

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

这已经在问题中了。我认为OP想知道为什么它不起作用。 –

2

如果声明$connection一个全局变量,你的代码就可以了。

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

一个例子是:

class Test { 

    protected $connection; 

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

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

依赖注入 - 如果你的代码是组织良好的话,可能是最好的方法。 –

+0

@JaredFarrish是的,DI很容易测试。 – xdazz

+0

你知道吗,我从来没有想过它,但有时候'global $ var'没有正确导入。所以如果需要,我使用'$ GLOBALS ['var']'。任何意见都赞赏这种方法的有效性。 –

相关问题