Estoy usando PHP 5 y he oído hablar de una nueva característica del enfoque orientado a objetos, llamada 'encadenamiento de métodos'. ¿Qué es exactamente? ¿Cómo lo implemento?
php
oop
method-chaining
Sanjay Khatri
fuente
fuente
Respuestas:
Es bastante simple en realidad, tiene una serie de métodos mutantes que devuelven todos los objetos originales (u otros), de esa manera puede seguir llamando a métodos en el objeto devuelto.
Esto genera "ab"
Pruébalo en línea!
fuente
$foo->setBar(1)->setBaz(2)
vs$table->select()->from('foo')->where('bar = 1')->order('ASC)
. Este último abarca múltiples objetos.$a = (new fakeString())->addA()->addB()->getStr();
Básicamente, tomas un objeto:
Llame a un método que efectivamente haga un
return $this;
al final:Dado que devuelve el mismo objeto, o más bien, una referencia al mismo objeto, puede continuar llamando a los métodos de la misma clase del valor de retorno, así:
Eso es todo. Dos cosas importantes:
Como notará, es solo PHP 5. No funcionará correctamente en PHP 4 porque devuelve objetos por valor y eso significa que está llamando a métodos en diferentes copias de un objeto, lo que rompería su código.
Nuevamente, debe devolver el objeto en sus métodos encadenables:
fuente
return &$this
en PHP4?Prueba este código:
fuente
El encadenamiento de métodos significa que puede encadenar llamadas a métodos:
Esto significa que method1 () necesita devolver un objeto, y method2 () recibe el resultado de method1 (). Method2 () luego pasa el valor de retorno a method3 ().
Buen artículo: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
fuente
Otra forma de encadenar métodos estáticos:
Vocación
fuente
Hay 49 líneas de código que le permiten encadenar métodos sobre matrices como esta:
Vea este artículo que le muestra cómo encadenar todas las setenta funciones array_ de PHP.
http://domexception.blogspot.fi/2013/08/php-magic-methods-and-arrayobject.html
fuente
Si te refieres al método de encadenamiento como en JavaScript (o algunas personas tienen en cuenta jQuery), ¿por qué no simplemente tomar una biblioteca que trae ese desarrollador? experiencia en PHP? Por ejemplo, Extras: https://dsheiko.github.io/extras/ Este amplía los tipos de PHP con los métodos JavaScript y subrayado y proporciona el encadenamiento:
Puede encadenar un tipo particular:
o
Alternativamente, puede ir polimórfico:
fuente
A continuación se muestra mi modelo que puede encontrar por ID en la base de datos. El método with ($ data) son mis parámetros adicionales para la relación, por lo que devuelvo $ this, que es el objeto en sí. En mi controlador puedo encadenarlo.
fuente