php 静态类的好处,PHP避免使用静态类来避免依赖,但我需要在任何地方使用全局...

假设我们有一个典型的类DB来访问数据库,如果这样的类是静态的,我们可以在我们的代码中的任何地方调用它:

DB::execQuery(...);

但是这会创建依赖关系,所以让我们使DB类不是静态的,在这种情况下我们会在代码中的某处:

$db = new DB();

然后我们可以调用我们的代码

$db->execQuery(...);

但是现在当在函数内部使用$db时,我们需要每次都像这样首先声明它

全球$db;

有办法解决这个问题吗?

一种方法可能是在使用它的类中注入$db对象,但是我必须在所有使用它的类中注入它,这是荒谬的,静态类可以更快地处理并且编写更少的代码.我错过了什么吗?!

解决方法:

可以在实例化到属性时注入$db,然后您只需要访问此属性而不是将其传递给每个方法.

class MyClass {

protected $_db; // DB Connection

public function __construct($db) {

$this->_db = $db;

}

public function foo() {

$this->_db->query('...');

}

}

除此之外,您可以考虑使用一个服务容器(也称为依赖注入容器),它可以像一个全局变量一样工作,但可以解决一些测试问题.看看其中一些相关问题

使用DI容器可以在类中使用静态方法,如DI_Container :: get(‘db’).它看起来很像全局或其他一些静态调用..但在这种情况下,DI_Container包含允许在测试和其他情况下采取额外操作的特殊方法.消除全局的一些“邪恶”.

标签:static-classes,php,global-variables,static,global

来源: https://codeday.me/bug/20190826/1729275.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值