02 PHP & la POO
Syntaxe de Base
class
La définition d'une classe commence par le mot-clé class suivi du nom de la classe.
warrior.php
<?php
class Warrior{
//Attributs
public $name = 'Conan'; //default value
public function my_name(){
echo $this->var;
}
}
new
Pour créer l'instance d'une classe on utilise le mot-clé new.
index.php
<?php
include('warrior.php');
$warrior1 = new Warrior();
$warrior1->my_name();
Attributs
Les attributs sont définies au sein d'une classe en utilisant un des mots-clés public, protected ou private suivie d'une déclaration classique de variable.
Les variables au sein d'une classe sont appellées attributs (membres, propriétés ou encore champs).
Au sein des méthodes de classes, les attributs peuvent être appelées en utilisant la syntaxe -> (opérateur de l'objet): $this->my_attr.
La pseudo-variable $this est disponible au sein de n'importe quelle méthode quand celle-ci est appelée depuis un objet. $this est une référence à l'objet appellant.
Dans notre classe warrior, ajouter les attributs (publiques) suivants avec une valeur par défault:
- point de vie (hp)
- point d'attaque (att)
- point de défence (def)
Visibilité
Les attributs sont définies comme publiques, protégées ou privées.
warrior.php
<?php
class Warrior{
//Attributs
public $name = 'Conan'; //default value
private $hp = 10;
private $att = 6;
private $def = 3;
public function my_name(){
echo $this->var;
}
}
index.php
<?php
include('warrior.php');
$warrior1 = new Warrior();
$warrior1->my_name();
echo $warrior->name;
echo $warrior->att;
echo $warrior->def;
echo $warrior->hp;
Que se passe t'il lors de l'accès au attributs hp, att et def ?
Getter & Setter
Pour remédier aux soucis d'accessibilités, nous allons mettre en oeuvre la notion de getter et de setter
warrior.php
<?php
class Warrior{
//Attributs
public $name = 'Conan'; //default value
private $hp = 10;
private $att = 6;
private $def = 3;
public function get_hp(){
return $this->hp;
}
public function set_hp($hp){
$this->hp = $hp;
}
public function my_name(){
echo $this->var;
}
}
Tester ces deux nouvelles méthodes, quels est leur intérêt ? Ajouter les getters et setters pour les autres attributs de notre classe.
Constructeur
La déclaration de constructeur permet d'ajouter un comportement qui sera appelé à chaque création d'une nouvelle instance de la classe.
warrior.php
<?php
class Warrior{
//Attributs
public $name = 'Conan'; //default value
private $hp = 10;
private $att = 6;
private $def = 3;
function __construct($name, $hp, $att, $def){
//TODO: complete behavior
}
}
Ce constructeur permet d'initialiser les attributs de notre instance lors de sa création.
Complétez le constructeur de notre classe puis instanciez plusieurs objets de type Warrior et enfin manipulez les.
Exercice
Nous avons vu comment créer des guerriers plus haut, à vous de réaliser les choses suivantes:
- Ajouter une méthode slap qui permet à un guerrier de gifler un autre guerrier ..
- Ajouter une méthode take_damage qui permet à un guerrier de subir des dégâts ..
- Simuler une "bagarre" entre deux guerriers ..