2010-07-21 25 views
2

J'ai une question à propos de la POO en PHP5. J'ai vu de plus en plus de code écrit comme ceci:Comment construire des fonctions multi-oop en PHP5

$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5)); 

Mais je ne sais pas comment créer cette méthode. J'espère que quelqu'un peut m'aider ici,: 0) merci beaucoup.

+0

double possible (http://stackoverflow.com/questions/3724112/php-method-chaining) – dynamic

Répondre

8

La clé pour enchaîner des méthodes comme celle de vos propres classes est de retourner un objet (presque toujours $this), qui est ensuite utilisé comme objet pour l'appel de méthode suivant.

Comme si:

class example 
{ 
    public function a_function() 
    { 
     return $this; 
    } 

    public function first($some_array) 
    { 
     // do some stuff with $some_array, then... 
     return $this; 
    } 
    public function second($some_other_array) 
    { 
     // do some stuff 
     return $this; 
    } 
} 

$obj = new example(); 
$obj->a_function()->first(array('str', 'str', 'str'))->second(array(1, 2, 3, 4, 5)); 

Remarque, il est possible de retourner un objet autre que $this, et les choses de l'enchaînement est au-dessus vraiment juste un moyen plus court de dire $a = $obj->first(...); $b = $a->second(...);, moins la laideur des variables des paramètres que vous aurez N'utilisez plus jamais après l'appel.

+4

Juste Pour votre information [Enchaînement méthode PHP?]: Cette technique est utilisée pour créer une interface fluide (http://en.wikipedia.org/wiki/Fluent_interface). –

+0

Hmmm pas plus? et tout va être gérer normalement? :) – ParisNakitaKejser

+0

@Dennis Haarbrink: Le nom m'avait échappé. Merci :) – cHao

0
$object->function()->first(array('str','str','str'))->secound(array(1,2,3,4,5)); 

Ce n'est pas strictement valide PHP, mais ce que cela dit est ... Vous appelez une méthode sur la classe d'objet $ qui se retourne un objet dans lequel vous appelez une méthode appelée first() qui a également renvoie un objet dans lequel vous appelez une méthode appelée second().

Donc, ce n'est pas nécessairement une seule classe (bien qu'il pourrait être) avec une méthode, c'est une série entière de différentes classes.

Quelque chose comme:

class AnotherClass { 
    public function AnotherClassMethod() { 
     return 'Hello World'; 
    } 
} 

class MyClass { 
    public function MyClassMethod() { 
     return new AnotherClass(); 
    } 
} 

$object = new MyClass(); 
echo $object->MyClassMethod()->AnotherClassMethod(); // Hello World