最佳做法是将对象作为参数返回? 更具体地说,以下哪些实施方案更好?
A)
$foo = new ClassAInstance();
$bar = new ClassBInstance();
$bar->doSomethingToFoo($foo);
b)中
$foo = new ClassAInstance();
$bar = new ClassBInstance();
$foo = bar->doSomethingToFoo($foo);
这个例子太过倾销。希望你理解我问题的一般概念。
答案 0 :(得分:1)
有趣的问题。两者在技术上都是正确的,但不是完全面向对象的。我认为真正的问题是foo的状态发生变化,因为$ bar。这意味着该功能可能至少有两个目的。
让对象改变自己的状态似乎更好,而不是改变foo状态的另一个对象。例如:
$foo->changeState($bar->calculateValue($foo));
答案 1 :(得分:0)
如果doSomethingToFoo($someObject)
负责更改传递的对象属性,则无需将更改的对象返回给客户端代码(这将是一种冗余方式)。
当通过参数发送对象时,该参数是指向原始对象的指针。因此,您的功能将直接影响原始对象
请考虑以下示例:
class ClassA {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
class ClassB {
function doSomethingWithObject($obj){
$obj->name = "changed name";
}
}
$foo = new ClassA("John");
echo $foo->name; // "John"
$bar = new ClassB();
$bar->doSomethingWithObject($foo);
echo $foo->name; // "changed name"