什么"返回$ this"是什么意思?

MEM*_*MEM 27 php oop zend-framework return

我正在尝试理解这段代码,当我到达最后一行时,我没有得到它.:(

我可以帮助您找到答案,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;
}
Run Code Online (Sandbox Code Playgroud)

更新:
我删除了我的评论,以便更好地澄清.

Mae*_*lyn 64

这种编码方式称为流畅的界面.return $this返回当前对象,因此您可以编写如下代码:

$object
  ->function1()
  ->function2()
  ->function3()
  ;
Run Code Online (Sandbox Code Playgroud)

代替:

$object->function1();
$object->function2();
$object->function3();
Run Code Online (Sandbox Code Playgroud)

  • 你需要考虑你的类的用法 - 如果你可能在彼此之后立即调用它的多种方法,那么使用方法链接会很方便.一个完美的例子是Doctrine的`Doctrine_Query`类. (4认同)

Jak*_*mpl 7

这将返回调用此方法的实例.这通常用于实现流畅的界面,因此您可以调用以下内容:

CoolClass::factory('hello')->setOptions(array('coolness' => 5))->sayHello();
Run Code Online (Sandbox Code Playgroud)

如果双方setOptionssayHello会在同一对象上调用.

  • 这比hello-> coolness 4级高出了一步。 (2认同)

Dou*_* T. 5

$this表示当前对象,即当前正在运行该方法的对象.通过返回$this对该对象的引用,该方法正在工作,并被发送回调用函数.

所以有人在做

 $foo2 = $foo->SetOptions($bar);
Run Code Online (Sandbox Code Playgroud)

$ foo2现在也指$ foo.


小智 5

你只需要创建一个函数链

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;
        }

}
Run Code Online (Sandbox Code Playgroud)

所以你可以使用这个

            My_class obj = new My_class();

            $return = obj->method1($param)->method2($param)->method3($param);
Run Code Online (Sandbox Code Playgroud)