(此问题使用 PHP 作为上下文,但不仅限于 PHP。例如,任何具有内置哈希的语言也是相关的)
让我们看一下这个例子(PHP):
function makeAFredUsingAssoc()
{
return array(
'id'=>1337,
'height'=>137,
'name'=>"Green Fred");
}
相对:
class Fred
{
public $id;
public $height;
public $name;
public function __construct($id, $height, $name)
{
$this->id = $id;
$this->height = $height;
$this->name = $name;
}
}
function makeAFredUsingValueObject()
{
return new Fred(1337, 137, "Green Fred");
}
方法#1当然更简洁,但是它很容易导致错误,例如
$myFred = makeAFredUsingAssoc();
return $myFred['naem']; // notice teh typo here
当然,有人可能会争辩说这$myFred->naem
同样会导致错误,这是真的。然而,有一个正式的课程对我来说感觉更僵硬,但我不能真正证明它是合理的。
使用每种方法的优点/缺点是什么?人们什么时候应该使用哪种方法?