什么是“返回$这”是什么意思?

问题描述 投票:26回答:7

我试图理解这段代码,当我到达最后一行,我没有得到它。 :(

我能有你的帮助,以找到答案,这是什么意思return $this

public function setOptions(array $options) {
    $methods = get_class_methods($this);
    foreach ($options as $key => $value) {
        $method = 'set' . ucfirst($key);
        if (in_array($method, $methods)) {
            $this->$method($value);
        }
    }

    //???? - return what ?
    return $this;
}

更新: 我已经删除我的意见更好的澄清。

php oop zend-framework return
7个回答
62
投票

编码的这种方式被称为fluent interfacereturn $this返回当前对象,所以你可以这样写代码:

$object
  ->function1()
  ->function2()
  ->function3()
  ;

代替:

$object->function1();
$object->function2();
$object->function3();

7
投票

这将返回该实例调用此方法上。这通常是实现fluent interfaces所以你可以调用的东西像做:

CoolClass::factory('hello')->setOptions(array('coolness' => 5))->sayHello();

如果双方setOptionssayHello将同一对象上调用。


5
投票

$this意味着当前对象,所述一个的方法,目前正在运行。通过返回$this一个参考对象的方法正在被发送回调用函数。

因此,任何人做

 $foo2 = $foo->SetOptions($bar);

$ foo2的现指$ FOO也。


4
投票

$这将是包含该函数的类。

所以,如果你要称呼它:

$obj->setOptions($options)

它会返回$ OBJ,已设定新的选择。通常,当事情是这样设置,你不必来获取返回,因为它影响的是对象本身,但它使这样你就可以在线使用。


2
投票

你只可以创建一个函数链

class My_class
{

        public function method1($param)
        {
                /*
                 * logic here
                 */

                return $this;
        }

        public function method2($param)
        {
                /*
                 * logic here
                 */

                return $this;
        }

        public function method3($param)
        {
                /*
                 * logic here
                 */

                return $this;
        }

}

所以你可以使用这个

            My_class obj = new My_class();

            $return = obj->method1($param)->method2($param)->method3($param);

1
投票

如果setOptions方法是ProgramOptions类或某事的一部分,$这将是指包含此方法的类,所以你会回传ProgramOptions的一个实例。


0
投票

所谓Fluent Interface它是一种常见的OOP技术。它的主要目的,以帮助在语言链中的多个方法调用,不支持级联方法,如PHP。所以

返回$此;

将这个类的返回一个更新的实例(对象),因此它可以使在其范围内另一个电话。 PHP中例如,

class Class_Name {
    private field1;
    private field2;
    private field3;

    public function setField1($value){

        $this->field1 = $value;

        return $this; 
    }

    public function setField2($value){

        $this->field2 = $value;

        return $this; 
    }

    public function setField3($value){

        $this->field3 = $value;

        return $this; 
    }
} 

$object = new Class_Name();
$object->setField1($value1)->setField2($value2)->setField3($value3);
© www.soinside.com 2019 - 2024. All rights reserved.