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