Easy-Micro

LANGAGE POO PHP Part 1
Constantes de classe

La programmation orientée objet en PHP : Constantes de classe

Constantes de classe

L'opérateur de résolution de portée (::), appelé double deux points (Scope Resolution Operator en anglais ou Paamayim Nekudotayim en hébreu), est utilisé pour appeler des éléments appartenant à une classe comme les constantes de classe, sortes d'attributs dont la valeur est constante, c'est-à-dire qu'elle ne change pas.

Les constantes de classe permettent d'éviter tout code muet. Voici un code muet :
<?php
$perso = new Personnage(50);

Pourquoi est-il muet ? Tout simplement parce qu'on ne sait pas à quoi 50 correspond. Qu'est-ce que cela veut dire ? Étant donné que je viens de réaliser le script, je sais que ce 50 correspond à la force du personnage.

Imaginez que ce paramètre ne peut prendre que 3 valeurs possibles :
  • 20, qui veut dire que le personnage aura une faible force ;
  • 50, qui veut dire que le personnage aura une force moyenne ;
  • 80, qui veut dire que le personnage sera très fort
Au lieu de passer ces valeurs telles quelles, on va plutôt passer une constante au constructeur. Ainsi, quand on lira le code, on devinera facilement que l'on passe une force moyenne au constructeur. C'est bien plus facile à comprendre qu'un nombre quelconque.
<?php
class Personnage {
  private $_force;
  private $_experience;
  private $_degats;

  // Déclarations des constantes en rapport avec la force
  const FORCE_PETITE = 20;
  const FORCE_MOYENNE = 50;
  const FORCE_GRANDE = 80;

  public function __construct() {

  }

  public function deplacer() {

  }

  public function frapper() {

  }

  public function gagnerExperience() {

  }

   // ...
}

L'opérateur de résolution de portée

Contrairement aux attributs, vous ne pouvez accéder à ces valeurs via l'opérateur -> depuis un objet (ni $this ni $perso ne fonctionneront) mais avec l'opérateur :: car une constante appartient à la classe et non à un quelconque objet.

<?php
class Personnage {
  private $_force;
  private $_experience;
  private $_degats;

  // Déclarations des constantes en rapport avec la force
  const FORCE_PETITE = 20;
  const FORCE_MOYENNE = 50;
  const FORCE_GRANDE = 80;

  public function __construct($forceInitiale) {
    // N'oubliez pas qu'il faut assigner la valeur d'un attribut uniquement depuis son setter !
    $this->setForce($forceInitiale);
  }

  public function deplacer() {

  }

  public function frapper() {

  }

  public function gagnerExperience() {

  }
  
  public function setForce($force) {
    // On vérifie qu'on nous donne bien soit une FORCE_PETITE, soit une FORCE_MOYENNE, soit une FORCE_GRANDE.
    if (in_array($force, [self::FORCE_PETITE, self::FORCE_MOYENNE, self::FORCE_GRANDE]))
    {
      $this->_force = $force;
    }
  }
}

// On envoie une FORCE_MOYENNE en guise de force initiale.
$perso = new Personnage(Personnage::FORCE_MOYENNE);


Flux RSS Easy-Micro - Abonnez-vous Easy-Micro [ François Bisch ]