gpt4 book ai didi

php - 在函数 PHP 中实例化类是不好的做法吗

转载 作者:可可西里 更新时间:2023-11-01 01:02:30 25 4
gpt4 key购买 nike

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

像这样的事情:

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 等

现在我认为这不是正确的做法,因为对象可能应该作为参数传递?但这意味着每次我想使用一个新对象时,都会创建一个新对象并将其发送到这些函数中的每一个中。

实际上,我的问题是:我是否应该将这些函数移动到它们自己的可以访问数据库对象的类/库中?我上面展示的示例通常是一种糟糕的做事方式吗?

最佳答案

更好的方法确实是创建类。您会将数据库对象传递给构造函数并使其成为实例变量。这样每个函数都可以访问数据库对象。

现在实例化例如被认为是不好的原因你在每个函数中的数据库对象,是因为如果你决定有一天改变你的数据源,你可能需要一个巨大的重构。如果将数据库对象传递到构造函数中,则无需任何重构即可将正确的对象传递/注入(inject)到类中。

...下面是关于 DI 的更多信息...

通过将您的对象传递给构造函数,您还创建了一个更清晰的 API => 您知道哪个对象依赖于另一个对象,您确切地知道哪个类使用您的 DB 对象。如果您开始实例化它或像您一样在函数内部以静态方式访问它,我将不得不查看所有类以查看您的 DB 对象的使用位置。还有一点,依赖注入(inject)强制 SRP(单一责任原则)=> 如果你开始注入(inject)太多对象(构造函数有很多参数),你应该怀疑你的类做的比它应该做的太多,并开始重构。

关于php - 在函数 PHP 中实例化类是不好的做法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20174469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com