2012-07-19 23 views
12

Tengo un problema en PHP. En mi archivo php, he creado la línea siguiente:¿Cómo hacer múltiples llamadas a métodos de clase en la misma línea?

$foo = $wke->template->notify() 
        ->type("ERROR") 
        ->errno("0x14") 
        ->msg("You are not logged.") 
        ->page("login.tpl"); 

Al final, necesito mi $foo variables volverá esto:

$foo->type = "ERROR" 
$foo->errno= "0x14" 
$foo->msg= "You are not logged." 
$foo->page= "login.tpl" 

Tenga en cuenta que el $wke->template es donde tengo que llamar a la notify() elemento.

+2

La pregunta no es clara. Explique sus intenciones originales solo con las palabras – zerkms

+0

¿Por qué insiste en hacerlo en una línea? ¡deberías hacerlo en llamadas separadas! – alfasin

+0

Gracias por su respuesta. Necesito crear un método para construir una variable con toda la información que necesito. Necesito personalizar todo el método llamado para hacer cosas específicas y, al mismo tiempo, devolver toda la información que necesito. – DrSAS

Respuesta

30

La forma de llamar a la función de clase uno por uno simplemente por "->" porque la función devuelve el mismo objeto de la clase. Vea el ejemplo a continuación. Usted recibirá este

class Wke { 

    public $type; 
    public $errno; 
    public $msg; 
    public $page; 

    public $template = $this; 

    public function notify(){ 
     return $this; 
    } 

    public function errorno($error){ 
     $this->errno = $error; 
     return $this; // returning same object so you can call the another function in sequence by just -> 
    } 
    public function type($type){ 
     $this->type = $type; 
     return $this; 
    } 
    public function msg($msg){ 
     $this->msg = $msg; 
     return $this; 
    } 
    public function page($page){ 
     $this->page = $page; 
     return $this; 
    } 
} 

El conjunto de la magia es return $this;

+0

¡Ha funcionado! ¡Gracias! – DrSAS

+0

vote por favor. –

+0

No puedo por ahora. No tengo derecho a votar Lo siento (reputación insuficiente): s – DrSAS

1

Cada uno de esos métodos deberá devolver algún objeto que almacene lo que haya establecido como argumento en él. Presumiblemente, será el template el que contenga cada propiedad de objeto en él, y cuando llame al método, establece esa variable correspondiente y se devuelve a sí mismo.

Cuestiones relacionadas