Principaux Concepts
Bonnes pratiques
- Maintenir les données privées.
- Initialiser toujours les données.
- Ne fournissez de méthodes d’accès que si cela est nécessaire.
- Utilisez les conventions standards pour nommer classes et méthodes. Un nom de classe doit comporter un substantif : Client, ClientPrivilegie… Les méthodes doivent avoir un nom signifiant, commencer par une lettre minuscule ; les méthodes d’accès doivent commencer par get (getNom()) et les méthodes d’altération par set (setNom()).
- Ne faites jouer à la méthode main que le rôle d’instanciation d’objets.
1 - Constructeur
En C# ou en Java par exemple, la surcharge de fonctions permet d’avoir plusieurs constructeurs pour un objet, mais en PHP cela n’est pas possible. Une fonction ne peut pas avoir plus qu’une seule définition.
class Exemple {
// les attributs - généralement privés
private float $x;
private int $y;
// constructeur
public function __construct(float $x, int $y = 0) {
$this->x = $x;
$this->y = $y;
}
// les méthodes
public function f1(int a, int b):bool
{
$flag = true;
// ...........code de f1
return $flag;
}
private function p2()
{
// ...........code de p2
}
}
class Exemple {
// les attributs - généralement privés
private float $x;
private int $y;
// constructeur
public function __construct() {
// compte le nombre d’arguments
$ctp = func_num_args();
// Récupère les arguments
$args = func_get_args();
if ($cpt==2){
$this->x = $x;
$this->y = $y;
};
}
// les méthodes
public function f1(int a, int b):bool
{
$flag = true;
// ...........code de f1
return $flag;
}
private function p2()
{
// ...........code de p2
}
}
new
), en passant en paramètres les futures valeurs des attributs de l’objet créé (s’il y en a).
Exemple $ex1; // --déclaration d’un nouvel objet
$ex1 = new Exemple();// --instanciation de cet objet
// --autre forme plus compacte
Exemple $ex2 = new Exemple(20,30);
2 - Autoréférence : le mot-clé this
À l’intérieur d’une méthode, le mot-clé this permet d’accéder à l’instance (l’objet) sur lequel la méthode est appelée
Lorsqu’il y a conflit de nom entre une variable locale et une variable d’instance, la variable locale l’emporte et masque
la variable d’instance. Pour contourner le masquage et utiliser la variable d’instance, il faut utiliser le mot clef this
qui désigne l’instance courante :
$this->variable_dinstance
class Exemple {
// les attributs - généralement privés
private float $x;
private int $y;
// constructeur
public function __construct() {
// compte le nombre d’arguments
$ctp = func_num_args();
// Récupère les arguments
$args = func_get_args();
if ($cpt==2){
$this->x = $x;
$this->y = $y;
};
}
// les méthodes
public function f1(int a, int b):bool
{
$flag = true;
// ...........code de f1
return $flag;
}
private function p2()
{
$y=3; // la variable locale a le même nom que la variable d’instance
$this->y = $y; // la variable d’instance passe de la valeur 4 à la valeur 3
}
}
3 - Accesseurs
Un accesseur est une méthode le plus souvent publique qui permet d’accéder à un attribut privé, en lecture
get
.
Voilà pourquoi on les appelle aussi des getters
class Exemple {
// les attributs - généralement privés
private float $x;
private int $y;
// constructeur
public function __construct() {
// compte le nombre d’arguments
$ctp = func_num_args();
// Récupère les arguments
$args = func_get_args();
if ($cpt==2){
$this->x = $x;
$this->y = $y;
};
}
// les méthodes
public function f1(int a, int b):bool
{
$flag = true;
// ...........code de f1
return $flag;
}
private function p2()
{
$y=3;
$this->y = $y;
}
public function getY( )
{
return $y; // un accesseur de la variable y
}
}
4 - Mutateurs
Un mutateur est une méthode le plus souvent publique qui permet d’accéder à un attribut privé, en écriture
set
.
Voilà pourquoi on les appelle aussi des setters
class Exemple {
// les attributs - généralement privés
private float $x;
private int $y;
// constructeur
public function __construct() {
// compte le nombre d’arguments
$ctp = func_num_args();
// Récupère les arguments
$args = func_get_args();
if ($cpt==2){
$this->x = $x;
$this->y = $y;
};
}
// les méthodes
public function f1(int a, int b):bool
{
$flag = true;
// ...........code de F1
return $flag;
}
private function p2()
{
$y=3;
$this->y = $y;
}
public function getY( )
{
return $y;
}
public setX(flot $x ):float
{
$this->x = $x; // un mutateur de la variable x
}
}
5 - la méthode magique __toString()
Cette méthode doit renvoyer une chaîne de caractères et est automatiquement sollicitée par print($objet);
ou par echo $objet;
.
class Exemple {
// les attributs - généralement privés
private float $x;
private int $y;
// constructeur
public function __construct() {
// compte le nombre d’arguments
$ctp = func_num_args();
// Récupère les arguments
$args = func_get_args();
if ($cpt==2){
$this->x = $x;
$this->y = $y;
};
}
// les méthodes
public function f1(int a, int b):bool
{
$flag = true;
// ...........code de F1
return $flag;
}
private function p2()
{
$y=3;
$this->y = $y;
}
public function __toString()
{
return "x : $this->x ; y : $this->y";
}
}
Exemple $ex1; // --déclaration d’un nouvel objet
$ex1 = new Exemple(1,30);// --instanciation de cet objet
echo $ex1 // Affiche x : 1 ; y : 30
6 - les méthodes magiques __get()
, __set()
Les deux méthodes magiques ne fonctionnent que dans les contextes objets. Ces méthodes magiques ne seront pas lancées en contexte statique.
Attention au double $$
!
Syntaxe
public function __set($var, $valeur) { $this->$var = $valeur; }
public function __get($var) { return $this->$var; }
class Exemple {
// les attributs - généralement privés
private float $x;
private int $y;
// constructeur
public function __construct() {
// compte le nombre d’arguments
$ctp = func_num_args();
// Récupère les arguments
$args = func_get_args();
if ($cpt==2){
$this->x = $x;
$this->y = $y;
};
}
// les méthodes
public function f1(int a, int b):bool
{
$flag = true;
// ...........code de F1
return $flag;
}
private function p2()
{
$y=3;
$this->y = $y;
}
public function __get($var)
{
return $this->$var;
}
public function __set($var, $valeur)
{
$this->$var = $valeur;
}
public function __toString()
{
return "x : $this->x ; y : $this->y";
}
}
Exemple $ex1; // --déclaration d’un nouvel objet
$ex1 = new Exemple();// --instanciation de cet objet
$ex1->y=3;
echo $ex1->y // Affiche 3