gpt4 book ai didi

php - 一个内衬类函数,做还是不做?

转载 作者:行者123 更新时间:2023-12-04 15:54:23 26 4
gpt4 key购买 nike

使用单行函数而不是多行函数有什么坏处吗?例如,我为 PDO 数据库连接编写了一个类文件。我为它写的所有功能,都是一行的。我还没有遇到任何错误,但如果有滞后或其他问题,它们会突然出现吗?

这里是一些函数。

public function getObject($query, $object) {
return $this->db->prepare("$query")->execute()->fetch(PDO::FETCH_OBJ)->$object;
}

public function getArray($query) {
return $this->db->prepare("$query")->execute()->fetchAll(PDO::FETCH_NUM);
}

public function insertArray($query, $array) {
return $this->db->prepare("$query")->execute($array);
}

这最终会遇到问题吗?或者他们一次被称为一个部分,就好像他们在自己的线路上一样?

谢谢。

最佳答案

像这样在一行中使用链式方法

return $this->db->prepare("$query")->execute()->fetch(PDO::FETCH_OBJ)->$object;

是什么Robert MartinClean Code (pg 98/99) 中调用“火车残骸” .它很难阅读,而且“通常被认为草率”,为了更具可读性,应该避免使用

$statement = $this->db->prepare("$query");
$statement->execute();
$result = $statement->fetch(PDO::FETCH_OBJ);
return $result->$object;

请注意,我更正了上面代码片段中的代码,因为您的单行代码有效,因为execute returns a boolean , 所以你不能在上面调用 fetch:

bool PDOStatement::execute ([ array $input_parameters ] )

换句话说,无论如何你都不能把它写成一行语句。

另请注意,方法链接通常违反了 Law of Demeter ,它指出

a method M of an object O may only invoke the methods of the following kinds of objects:

  • O itself
  • M's parameters
  • any objects created/instantiated within M
  • O's direct component objects
  • a global variable, accessible by O, in the scope of M

不遵循 LoD 通常会导致您的单元测试中出现 Mockfest,并使您的应用程序与不必要的更多类紧密耦合,这反过来会损害可重用性并增加更改所需的时间(以及其他方面)。

关于php - 一个内衬类函数,做还是不做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10571009/

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