Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-04-2010 11:36:57

Loader
Nouveau membre
Date d'inscription: 08-04-2010
Messages: 4

bootstrap double flèche (notions objet)

Bonjour à tous,

J'essaye de comprendre comment est lancé le bootstrap.

Jusqu'à maintenant j'ai l'habitude d'utiliser les flèches pour faire appel aux méthodes de mes classes, par contre je ne savais pas qu'on pouvais faire un appel 2 fois à la suite (ex : $maclasse->methode1()->methode2(); ) comme on peu le voir sur zf.

D'où ma question, comment est-ce que cela fonctionne ? Avez-vous des sources pour comprendre ou un mot clé pour trouver la doc sur le net ?

Merci beaucoup pour tout aide.


Ps : Voici un code que j'ai fait pour ne pas partir dans les détails et pour comprendre le fonctionnement, mais qui ne marche pas évidemment :

Code:

<?php

class Maclasse{
    
    public function bootstrap(){
        echo 'hello';
    }
    
    public function run(){
        echo 'world';
    }
}

$c = new Maclasse();


$c->bootstrap()->run();

Résultat : Fatal error: Call to a member function run() on a non-object in /path/file.php  on line 17

Hors ligne

 

#2 08-04-2010 12:56:41

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: bootstrap double flèche (notions objet)

il faut que tu retourne $this dans les methodes que tu souhaites chainées

Code:

<?php

class Maclasse{
    
    public function bootstrap(){
        echo 'hello';
        return $this;
    }
    
    public function run(){
        echo 'world';
        return $this;
    }
}

$c = new Maclasse();

$c->bootstrap()->run(); // affichera helloworld (parce que tu n'as pas mis d'espace entre les 2 mots ^^

Hors ligne

 

#3 08-04-2010 13:09:26

Loader
Nouveau membre
Date d'inscription: 08-04-2010
Messages: 4

Re: bootstrap double flèche (notions objet)

C'était donc aussi simple.. en tous cas ça marche, merci beaucoup ! ^^

Hors ligne

 

#4 08-04-2010 14:56:39

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: bootstrap double flèche (notions objet)

il suffit que la méthode retourne un objet pour qu'on puisse appeler une méthode

Code:

class Toto {
    function test() {
        return new Titi();
    }
}
class Titi {
    function foo() {
        return new Toto();
    }
    function bar() {
        return $this;
    }
}
$obj = new Toto();
$obj->test()->foo()->test()->bar()->bar()->foo()->test();

c'est le principe que j'ai utilisé ICI
http://www.z-f.fr/forum/viewtopic.php?id=765

A+JYT

Hors ligne

 

#5 09-04-2010 04:45:09

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: bootstrap double flèche (notions objet)

Une méthode = Retour d'un objet
Une fonction = Exécution d'un code

Hors ligne

 

#6 09-04-2010 09:38:11

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: bootstrap double flèche (notions objet)

Hello,

Wikipédia utilise le terme "désignation chaînée" : http://fr.wikipedia.org/wiki/D%C3%A9sig … AEn%C3%A9e

Je suis plus habitué à la traduction de l'anglais "interface fluide" (http://en.wikipedia.org/wiki/Fluent_interface)

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#7 09-04-2010 09:40:52

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: bootstrap double flèche (notions objet)

probitaille a écrit:

Une méthode = Retour d'un objet
Une fonction = Exécution d'un code

HOU la  non de non

une méthode est un membre d'un objet ou d'un classe
alors qu'une fonction n'est rattaché à rien

Code:

class toto {
  //methode qui ne retourne rien
  function mReturnVoid() {
    return;
  }
  //methode qui retourne un scalaire
  function mReturnScalar()
    return 15;
  }
  //methode qui retourne un objet
  function mReturnObject() {
    return new stdClass();
  }
}



//fonction qui ne retourne rien
function fReturnVoid() {
  return;
}
//fonction qui retourne un scalaire
function fReturnScalar()
  return 15;
}
//fonction qui retourne un objet
function fReturnObject() {
  return new stdClass();
}

la signature (c.a.d. les type de retours des argument et le nom) n'ont absolument rien à voir avec le fait qu'une définition est une fonction ou une methode

PHP utilise pour les deux le mot clef function car seul le fait d'être ou non dans une classe les différencies

si je reprends l'exemple ci-dessus et que j'ajoute

Code:

fonction returnObject() {
  return new Toto();
}

alors à partir de ma fonction je peux enchainer les ->

Code:

returnObject()->test()->foo()->test()->bar()->bar()->foo()->test();

A+JYT

Hors ligne

 

#8 09-04-2010 11:12:08

Loader
Nouveau membre
Date d'inscription: 08-04-2010
Messages: 4

Re: bootstrap double flèche (notions objet)

Merci à tous pour vos réponses, ça fait plaisir de voir un forum aussi actif et pertinent. smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages