作为属性声明或作为方法参数传递


Declare as property OR pass as method arguments

我正在写一个MySQL类。我注意到这已经让我困惑了。例如,我需要传递表作为函数的参数或声明属性,并在执行之前先执行setter方法。

public $table;
public function fetchByUniqueId($table,$id){
    $query = "SELECT * FROM etc";
}

这样想。$table是否告诉你MySQL类的特定实例或函数执行其操作所需的数据?

也使代码更容易理解?在这种情况下,将表名作为参数传递比将其设置为类的属性更明确地说明需要什么。

属性应该帮助定义对象实例的特定细节。它告诉我们一个对象是什么或者一个对象有什么。您正在创建的MySql类不代表一个特定的表,因此它不应该是该类的属性。

->fetchByUniqueId()方法对$table有较强的依赖性;如果你通过->table属性让它可用,你就隐藏了那个让你的代码"臭"的依赖。

最好的方法是尽可能地在方法签名中定义所有直接依赖项。

一个例外是,如果$table是类构造函数的依赖项,那么在从它创建的实例的整个生命周期中,它不应该改变。