php函数实例化,在函数PHP中实例化类是一种不好的做法

本文讨论了在重构代码时遇到的问题,即许多函数依赖于数据库对象。作者提出疑问,是否应将这些函数放入一个可以访问数据库的类或库中。文章建议采用依赖注入的方式,通过构造函数传递数据库对象,以提高代码的可测试性和可维护性,同时也遵循单一职责原则。这样做可以简化API,方便跟踪依赖,并在需要更换数据源时减少重构工作。
摘要由CSDN通过智能技术生成

我正在重构大量代码以使其更具可测试性,并且我有一堆依赖于实例化数据库对象的有用函数.

像这样的事情:

function id_from_name($table, $name)

{

$db = get_database();

//code that returns an id

}

function username_from_user_id($id)

{

$db = get_database();

//code that returns a username

}

还有更多类似id_exists,id_active等的信息.

现在,我认为这不是正确的选择,因为对象可能应该作为参数传递?但这意味着每次我要使用一个函数时,都要在每个函数中创建并发送一个新对象.

所以,我的问题确实是:我是否应该将这些函数移入可以访问数据库对象的类/库中?我上面显示的示例通常是一种不好的处理方式吗?

解决方法:

确实,更好的方法是上课.您将把数据库对象传递给构造函数,并使其成为实例变量.这样,每个函数都可以访问数据库对象.

现在,实例化实例的原因被认为很糟糕.您在每个函数中使用的数据库对象是因为,例如,如果您决定一天更改数据源,则可能需要进行大量重构.如果将数据库对象传递给构造函数,则只需将正确的对象传递/注入到类中,而无需任何重构.

…有关DI的更多信息…

通过将对象传递给构造函数,您还可以创建更清晰的API =>您知道哪个对象依赖于另一个对象,您确切知道哪个类使用您的DB对象.如果您像在函数中那样开始实例化或以静态方式访问它,我将不得不浏览所有类以查看在何处使用DB对象.再有一点,依赖性注入迫使SRP(单责任原则)=> 1.如果开始注入太多对象(构造函数有很多参数),则应该怀疑您的类做得比应做的要多,然后开始重构.

标签:php,class,function

来源: https://codeday.me/bug/20191030/1965768.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值