一个内衬类功能,做或不做?

WMI*_*WMI 2 php pdo

将功能排成一行而不是多行功能会有什么危害吗?例如,我为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);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Gor*_*don 5

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

return $this->db->prepare("$query")->execute()->fetch(PDO::FETCH_OBJ)->$object;
Run Code Online (Sandbox Code Playgroud)

是什么罗伯特·马丁所说的"火车残骸"在清洁守则(第98/99) .它很难阅读并且"通常被认为是草率的",应该避免使用更易读

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

请注意,我纠正在上面的代码段的代码,为您的一个班轮将无法工作,因为execute返回一个布尔值,所以你不能把fetch它:

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

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

另请注意,方法链接通常违反了得墨忒耳法则,法则规定了这一点

对象O的方法M只能调用以下类型的对象的方法:

  • O本身
  • M的参数
  • 在M中创建/实例化的任何对象
  • O的直接组件对象
  • 一个全局变量,可由O访问,在M的范围内

不遵循LoD通常会导致您的UnitTests中的Mockfest,并使您的应用程序紧密耦合到不必要的更多类,这反过来会损害可重用性并增加更改所需的时间(除其他外).