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 :

Instancier une nouvelle variable avec argument this


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 315
    Points : 345
    Points
    345
    Par défaut Instancier une nouvelle variable avec argument this
    bonjour,

    mon code vient d'un module de drupal 8 (CMS PHP) mais ma question n'a pas réellement de rapport avec le fonctionnement de drupal 8 mais carrément au niveau de PHP,
    le code vient du fichier stepManager.php du module https://www.drupal.org/project/ms_ajax_form_example

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public function getStep($step_id) {
        if (isset($this->steps[$step_id])) {
          // If step was already initialized, use that step.
          // Chance is there are values stored on that step.
          $step = $this->steps[$step_id];
        }
        else {
          // Get class.
          $class = StepsEnum::map($step_id);
          // Init step.
          $step = new $class($this);
        }
     
        return $step;
      }
    la variable $class récupère une valeur tableau en appelant une fonction statique venant d'une classe abstraite nommée "StepsEnum" ( StepsEnum::map($step_id) ) ;
    après il y a une nouvelle instanciation de la variable $class qui prend $this en argument !
    Je ne comprends pas pourquoi il faut d'abord instancier une nouvelle $class plutot que d'affecter directement la valeur de $class à $step.
    Est-ce que ca correspond à un pattern spécifique, et pourquoi passer $this en argument ???

    voici le code de la fonction statique 'map' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      public static function map($step) {
        $map = [
          self::STEP_ONE => 'Drupal\\ms_ajax_form_example\\Step\\StepOne',
          self::STEP_TWO => 'Drupal\\ms_ajax_form_example\\Step\\StepTwo',
          self::STEP_THREE => 'Drupal\\ms_ajax_form_example\\Step\\StepThree',
          self::STEP_FINALIZE => 'Drupal\\ms_ajax_form_example\\Step\\StepFinalize',
        ];
     
        return isset($map[$step]) ? $map[$step] : FALSE;
      }

    Merci d'avance

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Je ne comprends pas pourquoi il faut d'abord instancier une nouvelle $class plutot que d'affecter directement la valeur de $class à $step.
    la variable $class contient une chaine qui est le nom de la classe à instancier.
    $step est donc un objet , une instance de la classe dont le nom est contenu dans $classC'est ni plus ni moins qu'une instanciation dynamique , probablement car au moment où on écrit le code on ne sait pas qu'elle classe devra être instancier , on le fait donc dynamiquement en fonction de certains paramètre.

    et pourquoi passer $this en argument ???
    Pourquoi pas ?
    La classe instanciée à besoin d'avoir une référence vers l'instance de la classe actuelle j'imagine.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 315
    Points : 345
    Points
    345
    Par défaut
    effectivement en passant un peu plus de temps après une pause méninge, je saisie l'idée !

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 27/04/2011, 16h00
  2. Réponses: 10
    Dernier message: 28/11/2006, 21h53
  3. Réponses: 1
    Dernier message: 22/11/2006, 20h49
  4. Réponses: 2
    Dernier message: 12/05/2006, 16h37
  5. [API][Système] Executer une commande dos avec arguments
    Par oOoOuuhmAn dans le forum Général Java
    Réponses: 4
    Dernier message: 17/03/2006, 12h37

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