PHP Objet Les gâteaux et leur moule : - Le moule est unique. Il peut produire une quantité infinie de gâteaux. Dans ce cas-là, les gâteaux sont les objets et le moule est la classe : le moule va définir la forme du gâteau. - La classe contient donc le plan de fabrication d'un objet et on peut s'en servir autant qu'on veut afin d'obtenir une infinité d'objets. Private, impose quelques restrictions. On n'aura accès aux attributs et méthodes seulement depuis l'intérieur de la classe, c'est-à-dire que seul le code voulant accéder à un attribut privé ou une méthode privée écrit(e) à l'intérieur de la classe fonctionnera. Sinon, une jolie erreur fatale s'affichera disant que vous ne pouvez pas accéder à telle méthode ou tel attribut parce qu'il ou elle est privé(e). CONSTRUCTEUR : Affecter une valeur aux attributs sans le faire en dur Imaginez un objet pour lequel vous avez besoin d'initialiser les attributs dès sa création, sans connaitre leurs valeurs à l'avance. Par exemple, vous souhaiteriez pouvoir spécifier la force et les dégâts d'un personnage dès sa création. Actuellement, la seule possibilité qui s'offre à vous est de modifier ces attributs manuellement, une fois l'objet créé. Il existe en PHP une méthode, appelée le constructeur, qui remplira ce rôle. Ce constructeur n'est autre qu'une méthode écrite dans votre classe. Constantes de classe [CONST] Dans une classe, quand il y a des valeurs prédéfinies pour un attribut (EtapesTrail : 15 - 30 - 45), on utilise ça : const MINABLE = 15; const CHAUDLAPIN = 30; const COSTAUD = 45; Du coup, au lieu d'écrire : $course = new unTrail(30) On écrira : $course = new unTrail(unTrail::CHAUDLAPIN) Méthodes statiques [STATIC FUNCTION] : Méthodes qui sont faites pour agir sur une classe et non sur un objet (sinon on aurait mis "THIS". Attribut statique [PRIVATE STATIC] : Déclarer un attribut qui appartient à la classe et non à un objet Une classe est composée de deux parties (éventuellement trois) : - une partie déclarant les attributs. Ce sont les caractéristiques de l'objet ; - une partie déclarant les méthodes. Ce sont les fonctionnalités de chaque objet ; - éventuellement, une partie déclarant les constantes de classe. Nous nous en occuperons en temps voulu. Il faut bien sûr implémenter (écrire) les getters et setters qui nous permettront d'accéder et de modifier les valeurs de notre objet. Getter est une méthode chargée de renvoyer la valeur d'un attribut Setter est une méthode chargée d'assigner une valeur à un attribut en vérifiant son intégrité (si vous assignez la valeur sans aucun contrôle, vous perdez tout l'intérêt qu'apporte le principe d'encapsulation). _id; } public function nom() { return $this->_nom; } public function forcePerso() { return $this->_forcePerso; } public function degats() { return $this->_degats; } public function niveau() { return $this->_niveau; } public function experience() { return $this->_experience; } // Liste des setters public function setId($id) { // On convertit l'argument en nombre entier. // Si c'en était déjà un, rien ne changera. // Sinon, la conversion donnera le nombre 0 (à quelques exceptions près, mais rien d'important ici). $id = (int) $id; // On vérifie ensuite si ce nombre est bien strictement positif. if ($id > 0) { // Si c'est le cas, c'est tout bon, on assigne la valeur à l'attribut correspondant. $this->_id = $id; } } public function setNom($nom) { // On vérifie qu'il s'agit bien d'une chaîne de caractères. if (is_string($nom)) { $this->_nom = $nom; } } public function setForcePerso($forcePerso) { $forcePerso = (int) $forcePerso; if ($forcePerso >= 1 && $forcePerso <= 100) { $this->_forcePerso = $forcePerso; } } public function setDegats($degats) { $degats = (int) $degats; if ($degats >= 0 && $degats <= 100) { $this->_degats = $degats; } } public function setNiveau($niveau) { $niveau = (int) $niveau; if ($niveau >= 1 && $niveau <= 100) { $this->_niveau = $niveau; } } public function setExperience($experience) { $experience = (int) $experience; if ($experience >= 1 && $experience <= 100) { $this->_experience = $experience; } } } ?>