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

Mik*_*ike 5 php class

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

现在,我想创建另一个类中的MySQL查询,但如果我定义$db = new DB();index.php,我不能使用$db另一个类变种.$db如果我想进行查询,是否必须一遍又一遍地定义变量?或者有没有办法$db使用对象全局var 来创建var?

Gor*_*don 11

最干净的方法是通过注入数据库类来聚合数据库类.所有其他方法,比如使用关键字或使用方法,更不用说Singleton,正在引入类和全局范围之间的紧密耦合,这使得应用程序更难以测试和维护.做就是了globalstatic

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

class SomeClassUsingDb
{
    protected $db;
    public function __construct($db)
    {
        $this->db = $db;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果需要依赖关系来为实例创建有效状态,请使用构造函数注入.如果依赖项是可选的或者需要在运行时可以互换,请使用Setter Injection,例如

class SomeClassUsingDb
{
    protected $db;
    public function setDb($db)
    {
        $this->db = $db;
    }
}
Run Code Online (Sandbox Code Playgroud)


Sjo*_*erd 5

你可能想要一个单身人士.这为您提供了一种在代码中的任何位置获取DB实例的方法.然后在任何你想要查询的地方,首先要做$db = DB::getInstance();.

另一种方法是依赖注入,它将数据库实例传递给所有需要的实例.


Tha*_*ama 0

在你的index.php文件中使用

require_once('path_to_file_with_class.php');
Run Code Online (Sandbox Code Playgroud)

您还可以使用include_once,如果“path_to_file_with_class.php”文件不可用,它会向您发出警告而不是错误。