метод цепочки php возвращает переменную, а метод вызывает другой метод

#php #return-value #method-chaining

#php #возвращаемое значение #метод-цепочка

Вопрос:

Я видел разные статьи о цепном методе, но я все еще не понимаю разницы между «return $this» и «return $this-> someVariable».Я также хочу знать, как метод вызывает другой метод внутри и вне класса.

Не мог бы кто-нибудь любезно объяснить это? спасибо вам!

В моем примере он отображает «bca», но я не понимаю, почему «a» отображается последним…

 class validation {

    public function __construct($a) {
        $this->a = $a;
    }
    public function one($a) {
        echo $a = "b";
        return $this;
    }
    public function two($a) {
        echo $a = "c";
        return $this->a;
    }
}

$a = "a";
$NameErr = new validation($a);
echo $NameErr->one($a)->two($a);
  

Ответ №1:

Он возвращается из two($a), поскольку он возвращает $this->a, который задан в конструкторе как «a», а метод one($a) возвращает экземпляр объекта, для которого затем вызывается функция two .

$это относится к экземпляру объекта. Разница в том, что return $this->someVariable просто возвращает переменную.

Также просто хороший совет по кодированию. Объявите $a в классе как закрытую переменную следующим образом:

  class Validation
 {
      private $a;
 }
  

Ответ №2:

Сначала позвольте мне сказать, что $this относится к классу, в котором вы находитесь.

Этот способ кодирования называется fluent interface . return $this возвращает текущий объект,

  $NameErr->one($a)->two($a);
  

такой же, как

 $NameErr->one($a);
$NameErr->two($a);
  

И в этом случае

Сначала вызывается метод one(), при этом выводится значение b и возвращается объект класса. Теперь вызывается метод two(), выводится значение c и возвращается свойство, которое выводится из класса.

ps: объявление переменной $a как private было бы хорошей практикой.