Instances de classe...

ViPHP
ViPHP | 3607 Messages

29 mai 2009, 16:59

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!

ViPHP
ViPHP | 2287 Messages

29 mai 2009, 17:53

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 3607 Messages

30 mai 2009, 12:45

Merci beaucoup je testerai ça lundi... ;)
Et sinon ça a à voir avec les singleton et tout ça...?

ViPHP
ViPHP | 2287 Messages

30 mai 2009, 12:59

Non, ce n'est que du sucre syntaxique de POO. C'est joli, mais sur le plan fonctionnel ça n'apporte rien ;-)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 mai 2009, 13:36

Pour la précision, ce qu'a décrit Calimero correspond à l'implémentation de l'interface "Fluent"
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 2287 Messages

30 mai 2009, 13:57

Pour la précision, ce qu'a décrit Calimero correspond à l'implémentation de l'interface "Fluent"
:pouce:
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 3607 Messages

01 juin 2009, 09:19

Cimer albert!
Je marque [résolu] ! :wink:

ViPHP
ViPHP | 4674 Messages

01 juin 2009, 13:14

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 :-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).