Estou usando o PHP 5 e ouvi falar de um novo recurso da abordagem orientada a objetos, chamado 'encadeamento de métodos'. O que é isso exatamente? Como faço para implementá-lo?
php
oop
method-chaining
Sanjay Khatri
fonte
fonte
Respostas:
Na verdade, é bastante simples: você tem uma série de métodos mutadores que retornam os objetos originais (ou outros), para que você possa continuar chamando métodos no objeto retornado.
Isso gera "ab"
Experimente online!
fonte
$foo->setBar(1)->setBaz(2)
vs$table->select()->from('foo')->where('bar = 1')->order('ASC)
. O último abrange vários objetos.$a = (new fakeString())->addA()->addB()->getStr();
Basicamente, você pega um objeto:
Chame um método que efetivamente faça um
return $this;
no final:Como ele retorna o mesmo objeto, ou melhor, uma referência ao mesmo objeto, você pode continuar chamando métodos da mesma classe para o valor de retorno, da seguinte maneira:
É isso mesmo. Duas coisas importantes:
Como você observa, é apenas o PHP 5. Ele não funcionará corretamente no PHP 4 porque retorna objetos por valor e isso significa que você está chamando métodos em diferentes cópias de um objeto, o que quebraria seu código.
Novamente, você precisa retornar o objeto em seus métodos encadeados:
fonte
return &$this
no PHP4?Tente este código:
fonte
O encadeamento de métodos significa que você pode encadear chamadas de métodos:
Isso significa que method1 () precisa retornar um objeto e method2 () recebe o resultado de method1 (). Method2 () passa o valor de retorno para method3 ().
Bom artigo: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
fonte
Outro caminho para o encadeamento de métodos estáticos:
Chamando
fonte
Existem 49 linhas de código que permitem que você encadeie métodos sobre matrizes como esta:
Veja este artigo que mostra como encadear todas as setenta funções do array_ do PHP.
http://domexception.blogspot.fi/2013/08/php-magic-methods-and-arrayobject.html
fonte
Se você quer dizer encadeamento de métodos como no JavaScript (ou algumas pessoas lembram do jQuery), por que não usar uma biblioteca que traga esse desenvolvedor. experiência em PHP? Por exemplo Extras - https://dsheiko.github.io/extras/ Este estende os tipos PHP com os métodos JavaScript e Underscore e fornece encadeamento:
Você pode encadear um tipo específico:
ou
Como alternativa, você pode ir polimórfico:
fonte
Abaixo está o meu modelo que é capaz de encontrar por ID no banco de dados. O método with ($ data) são meus parâmetros adicionais para relacionamento, então eu retorno o $ this, que é o próprio objeto. No meu controlador eu sou capaz de encadeá-lo.
fonte