IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Enchaîner les fonctions


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut Enchaîner les fonctions
    Bonjours tout le monde,
    Est-ce possible de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class C{
         public function f(){
              echo '.';
              return $this;
         }
    }
    $v=new C;
    $v->f()->f()->f()->f()->f();
    mais en statique, pour donner ce résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C::f()::f()::f()::f()::f()::f();
    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Il suffit de déclarer la méthode en static et de renvoyer une nouvelle instance de C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class C
    {
        public static function f() {
            echo 'glup.';
            return new C;
        }
    }
     
    C::f()::f()::f()::f()::f()::f();
    Ce n'est possible qu'à partir de PHP 7.

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Citation Envoyé par CosmoKnacki Voir le message
    Il suffit de déclarer la méthode en static et de renvoyer une nouvelle instance de C:
    C'est étrange de renvoyer une nouvelle instance de la classe appelée dans une fonction statique, non ?
    Quand tu travailles en statique, la notion d'instance s'efface. D'ailleurs c'est pour cette raison que ceci est une faute : abstract public static function foo(), une fonction statique à redéfinir dans une instance enfant alors qu'il n'y a pas d'instance qui tienne...
    Dans ton cas de figure, tu peux tout simplement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class C
    {
        public static function f(): string {
            echo 'glup.';
            return __CLASS__;
        }
    }
     
    C::f()::f()::f()::f()::f()::f();
    PHP 7+

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    J'ai cherché midi à quatorze heure! Il suffit effectivement de renvoyer le nom de la classe.

  5. #5
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    Merci pour vos réponses, juste au cas où ça peut aider, les variables magique c'est pas super parce que si tu ne l'utilise pas, "tu appel la fonction mais tu n'utilise pas la variable", dans ce cas elle s'affiche à l'écran. Pas dans le cas de "new Class".

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    ... les variables magique c'est pas super parce que si tu ne l'utilise pas, "tu appel la fonction mais tu n'utilise pas la variable", dans ce cas elle s'affiche à l'écran.
    C'est quoi ce charabia? J'ai rien compris.

    Si pour une raison inconnue tu ne veux pas utiliser la constante magique __CLASS__, tu peux toujours la remplacer par une chaîne avec le nom de ta classe en dur. Mais c'est moins clair et ça ne simplifie pas les éditions futures du script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class C
    {
        public static function f(): string {
            echo 'glup.';
            return 'C';
        }
    }
    Le défaut de new C est de créer une nouvelle instance de la classe pour rien, alors qu'on appelle une simple méthode statique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. doc sur les fonctions
    Par masterfab dans le forum C
    Réponses: 18
    Dernier message: 23/06/2005, 17h55
  2. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58
  3. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  4. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  5. Réponses: 7
    Dernier message: 24/05/2003, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo