Php 如何从另一个类访问对象?

Php 如何从另一个类访问对象?,php,class,Php,Class,我有一个数据库类,用于进行选择、更新和删除查询 现在,我想在另一个类中创建一个MySQL查询,但是如果我定义$db=new db()在index.php中,我不能在另一个类中使用$db变量。如果要进行查询,是否必须反复定义变量$db?或者有没有一种方法可以使$db变量与对象全局变量一起使用?在index.php文件中使用 require_once('path_to_file_with_class.php'); 您还可以使用include_once,如果“path_to_file_with_cl

我有一个数据库类,用于进行选择、更新和删除查询


现在,我想在另一个类中创建一个MySQL查询,但是如果我定义
$db=new db()
index.php
中,我不能在另一个类中使用
$db
变量。如果要进行查询,是否必须反复定义变量
$db
?或者有没有一种方法可以使
$db
变量与对象全局变量一起使用?

index.php
文件中使用

require_once('path_to_file_with_class.php');

您还可以使用
include_once
,如果“path_to_file_with_class.php”文件不可用,它将给您一个警告而不是错误。

您可以在index.php文件中将其定义为全局,并且在类构造函数中也放置
$this->db&=$GLOBALS['db']

您可能需要一个。这为您提供了一种在代码中任何位置获取DB实例的方法。然后,在任何需要执行查询的地方,首先执行
$db=db::getInstance()


另一种方法是,将DB实例传递给所有需要DB实例的类。

在类(单独的文件)上定义它。然后对每个需要var的PHP文件都需要它。

首先将数据库设为类a。然后在你的新课上,你可以做如下事情:

class myNewClass{
  private $_db;

  public function  __construct(){
     $this->_db = DB::getInstance();
  }
}

使用神奇的函数
\uuu autoload()

最干净的方法是在需要的地方使用数据库类。所有其他方法,比如使用关键字或使用方法,更不用说单例,都是在类和全局范围之间引入紧密耦合,这使得应用程序更难测试和维护。照办

// index.php
$db  = new DBClass;               // create your DB instance
$foo = new SomeClassUsingDb($db); // inject to using class

如果需要依赖项来为实例创建有效状态,请使用。如果依赖项是可选的或需要在运行时可互换,请使用Setter注入,例如

class SomeClassUsingDb
{
    protected $db;
    public function setDb($db)
    {
        $this->db = $db;
    }
}

这里可以找到php中单例模式的一个示例:要使对象全局可用,只需要一个静态方法来实例化它。它不一定是单身。两者都很难闻,所以依赖注入是一种方法。那么,我应该如何使用$db var than呢$这个->数据库->选择()@迈克:是的,就是这样。或者通过一个getter(如果你写了一个)
class SomeClassUsingDb
{
    protected $db;
    public function setDb($db)
    {
        $this->db = $db;
    }
}