Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP múltiplas chamadas de função de objeto


isso é chamado de encadeamento de métodos e é feito retornando uma referência à classe ( $this ), ou outro objeto de classe dessas funções. Então você pode chamar um método no objeto retornado.


Aqui está um exemplo simples.
class foo{
     protected $_bar;

     public function bar($value){
          $this->_bar = $value;
          return $this;
    }


   public function out(){
        echo $this->_bar;
   }
}

$a = new foo();
$a->bar('hello')->out();

saída:
'hello'

Só para explicar um pouco mais, o código acima $a->bar('hello')->out(); é aproximadamente equivalente a fazer isso:
 $a = new foo();
 $b = $a->bar('hello');  //$a and $b are the same instance of the object
 $b->out();

Agora porque bar() retorna $this poderíamos atribuí-lo a $b como acima e então chame out() . Mas $a e $b ambos referenciam a mesma instância do foo objeto, porque retornamos $this de bar() . Portanto, não há necessidade dessa variável "espúria" extra, pois podemos apenas referenciar o objeto de retorno diretamente para a próxima chamada. Isso funciona com qualquer objeto que é retornado de um método (não apenas $this), mas obviamente a próxima chamada na cadeia é contra o objeto retornado.