将对象作为参数返回

时间:2016-04-01 18:35:46

标签: php oop object methods

最佳做法是将对象作为参数返回? 更具体地说,以下哪些实施方案更好?

A)

$foo = new ClassAInstance();
$bar = new ClassBInstance();

$bar->doSomethingToFoo($foo);

b)中

$foo = new ClassAInstance();
$bar = new ClassBInstance();

$foo = bar->doSomethingToFoo($foo);

这个例子太过倾销。希望你理解我问题的一般概念。

2 个答案:

答案 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"

http://php.net/manual/en/language.oop5.references.php