2010-05-28 19 views
8

He tratado de encontrar una buena introducción sobre objetos OOP encadenables en PHP, pero sin ningún resultado bueno todavía.PHP OOP: objetos encadenables?

¿Cómo se puede hacer algo como esto?

$this->className->add('1','value'); 
$this->className->type('string'); 
$this->classname->doStuff(); 

O incluso: $this->className->add('1','value')->type('string')->doStuff();

Gracias mucho!

Respuesta

17

La clave es devolver el objeto en sí mismo dentro de cada método:

class Foo { 
    function add($arg1, $arg2) { 
     // … 
     return $this; 
    } 
    function type($arg1) { 
     // … 
     return $this; 
    } 
    function doStuff() { 
     // … 
     return $this; 
    } 
} 

Cada método, que devuelve el objeto en sí mismo, puede ser utilizado como un intermedio en una cadena método. Vea Wikipedia’s article on Method chaining para más detalles.

+0

increíble lo fácil que era hacer. No tenia idea. Muchas gracias Gumbo! – Industrial

11

acaba de regresar $ presente en el add() y tipo() métodos:

function add() { 
    // other code 
    return $this; 
} 
5

Otro término para esto es el Fluent Interface

+0

Agregar una nota: el encadenamiento de métodos no es más que una técnica para crear una interfaz fluida. – koen