Подтвердить что ты не робот

Что означает "return $this"?

Я пытаюсь понять этот код, и когда я дошел до последней строки, я не понял.: (

Могу ли я получить вашу помощь, чтобы узнать, что означает 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;
}

Update:
Я удалил свои комментарии для лучшего уточнения.

4b9b3361

Ответ 1

Этот способ кодирования называется свободным интерфейсом . return $this возвращает текущий объект, поэтому вы можете написать такой код:

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

вместо:

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

Ответ 2

Это вернет экземпляр, вызываемый этим методом. Обычно это делается для достижения плавных интерфейсов, чтобы вы могли называть такие вещи, как:

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

Если оба тега setOptions и sayHello будут вызываться на одном и том же объекте.

Ответ 3

$this означает текущий объект, тот, который выполняется в данный момент. Возвращая $this ссылку на объект, который работает метод, отправляется обратно вызывающей функции.

Итак, кто-то делает

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

$foo2 теперь также относится к $foo.

Ответ 4

$это будет класс, содержащий эту функцию.

Итак, если вы назовете это так:

$obj->setOptions($options)

он вернет $obj, который был установлен с новыми параметрами. Обычно, когда что-то установлено так, вам не нужно фиксировать возврат, потому что он влияет на сам объект, но он делает так, что вы можете использовать его в строке.

Ответ 5

Если метод SetOptions является частью класса ProgramOptions или что-то еще, $this будет ссылаться на класс, содержащий этот метод, поэтому вы должны передать экземпляр ProgramOptions.

Ответ 6

вы можете создать цепочку функций

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