该方法似乎是正确的(除非您需要使用 $this-> 来访问该属性),但是: 自己尝试一下,看看 getter 和 setter 是如何正常使用的。getter 应该返回一些东西,而 setter 应该设置一些东西。如果你需要在内部做“某事”,你应该使用另一种方法,甚至在构造函数中做,等等。
class Item{
public $itemid;
public $itemattribute;
function __construct($itemid){
$this->itemid = $itemid;
}
public function getItemId(){
return $this->itemid;
}
//option 1:)
public function calculateAttributeValue(){
$this->itemAttribute = foo($this->itemid);
}
//option 2:)
public function calculateAttributeValue($func){
$this->itemAttribute = $func($this->itemid);
}
//option 3:) (lazy loading)
public function getItemAttribute(){
if ($this->itemAttribute == null){
$this->itemAttribute = foo($this->itemid);
}
return $this->itemAttribute;
}
//option 4 (eager loading)
function __construct($itemid){
$this->itemid = $itemid;
$this->itemAttribute = foo($this->itemid);
}
public function getItemAttribute(){
return $this->itemAttribute;
}
}
然而,使用急切或延迟加载是一个好主意。每当您需要“调用”另一个函数来计算一个值时,在 getter 将返回一个值之前,您的设计对“以正确的顺序调用函数”变得敏感,这对大型类不利,甚至更糟,如果一个计算依赖于之前完成的另一个计算......
不好的用法:
$myClass = new Item(5);
$myClass->CalulateA();
$myClass->CalculateB();
$myClass->getB();
更好的:
$myClass = new Item(5); //calculates A and B
$myClass->getB();
或者
$myClass = new Item(5);
$myClass->getA(); //calculates A.
$myClass->getB(); //calculates B and A when required.