Page 1 sur 1

Instances de classe...

Posté : 29 mai 2009, 16:59
par jojolapine
Bonjour à tous,
je suis actuellement en train de créer une classe de construction de forms rien de bien extraordinaire...

Je souhaite pouvoir effectuer ceci:
$form = new form();

$form -> entetes('blabla')
      -> startFieldset('blublu')
        -> input('blibli')
        -> input('bloublou')
      -> endFieldset();

$form -> render();
hors actuellement celà me sort des erreurs, je suis obligé de faire:
$form = new form();

$form -> entetes('blabla');
$form -> startFieldset('blublu');
  $form -> input('blibli');
  $form -> input('bloublou');
$form -> endFieldset();

$form -> render();
J'ai cru comprendre qu'il fallait jouer avec des instances de classes ou je ne sais trop quoi...
Mais j'avoue être un peu perdu ;)
Merci d'avance pour vos lumière!

Posté : 29 mai 2009, 17:53
par Calimero
Beaucoup plus simple :
class TaClasse{
  function TaMethode(){
    // Ton code...

    // Ce qu'il te manque !
    return $this;
  }
}
Tu auras compris que, comme cette technique squatte le return de la méthode, elle impose quelques contraintes dans le reste de ton code (besoin d'accéder à certaines données explicitement au lieu d'un passage par retour de méthode notamment).

Pour être complet, cette technique s'appelle du chaînage d'appels de méthodes.

Posté : 30 mai 2009, 12:45
par jojolapine
Merci beaucoup je testerai ça lundi... ;)
Et sinon ça a à voir avec les singleton et tout ça...?

Posté : 30 mai 2009, 12:59
par Calimero
Non, ce n'est que du sucre syntaxique de POO. C'est joli, mais sur le plan fonctionnel ça n'apporte rien ;-)

Posté : 30 mai 2009, 13:36
par zeus
Pour la précision, ce qu'a décrit Calimero correspond à l'implémentation de l'interface "Fluent"

Posté : 30 mai 2009, 13:57
par Calimero
Pour la précision, ce qu'a décrit Calimero correspond à l'implémentation de l'interface "Fluent"
:pouce:

Posté : 01 juin 2009, 09:19
par jojolapine
Cimer albert!
Je marque [résolu] ! :wink:

Posté : 01 juin 2009, 13:14
par Hywan
Hey :-),

D'ailleurs, on appelle ça les interfaces fluides en français et non pas le chaînage de méthodes (quoi que c'est joliment dit aussi).
L'inconvénient majeur est pour la gestion d'erreur. Si une erreur est lancée au début, tu auras une erreur PHP juste derrière. Mais bon, ce n'est que pour le mode de débugage :-).