PHP objet
[par jullule] a completer
Cet article va rasembler les principales commande de la programmation objet en PHP. Il s'agit d'un mémo et non d'un tutoriel.
La notion d'objet
En objet on crée des classes (moule) qui servent a faire des objets. Une classe (moule) peut servir a faire autan d'objet que l'on veut.
Ces classes (moules) il faut les definir, pour cela on va leur attribuer des attributs (variables) et des methodes (fonction)
Créer une classe
Nous utilison l'exemple d'un bateau
<?php class Bateau { private $_carburant; // quantitée de carburant private $_localisation; // sa localisation private $_fret; // le nombre de marchandises dans la cale private $_couleur; // la couleur du bateau public function setfioul() // methode pour remplir ou vider le reservoir (de x litres) { } public function deplacer() //méthode pour deplacer la bateau { } public function charger() // méthode pour charger la cale (de x marchandise) { } public function decharger() // méthode pour vider la cale (de x marchandise) { } public function setCouleur() // méthode pour vider la cale (de x marchandise) { } } ?>
Definir une methode
voici une methode que nous definissons, on la placeras dans la classe bateau
public function direCoucou() { echo 'Coucou !'; }
Créer un objet
Un objet est donc ce qui utilise la classe pour se definir.
$surcouf = new bateau(); //$surcouf est un objet de type bateau.
Appeler une methode de l'objet
pour appeler une methode, il faut déja avoir crée l'objet, sinon ca marche moins bien.
$surcouf->direCoucou();
ici on appel la methode direCoucou de $surcouf, cette methode affiche "Coucou !" a l'écran. c'est sur ce n'est pas très utile, mais on voit le principe.
Acceder aux attribut
Les attribus ne peuvent pas être lus ou modifier directement (ils sont privée). C'est contraignant mais ca les protèges de nos bétises.
Donc si on fais ça: $surcouf->_fret = $surcouf->_fret + 200; ca ne marche pas. il faut passer par des methodes
Accesseur (lire un attribut)
pour lire un attribut, on cree une methode de type accesseur en la nommant du nom de l'attribut qu'elle renvoit. Ce n'est pas obligatoire mais c'est une convention. le principale est que ce soit clair et comprehensible par soi et par les autres
public function carburant()
{
return $this->_carburant; //renvoi $_carburant.
}
pour utiliser cette methode
$variable = surcouf.carburant(); //recupere dans une variable l'attribut $_carburant de surcouf
Mutateur (modifier un attribut)
pour modifier un attribut, on cree une methode de type mutateur en mettant "set" dans son nom. Ce n'est pas obligatoire mais c'est une convention.
public function setFioul($fioul)
{
$_carburant = $fioul; //l'attribut $_carburant = l'argument $fioul.
}
pour utiliser cette methode
surcouf.carburant(1500); //met la valeur $_carburant a 1500
Constructeur
Le constructeur est une methode qui définit l'état des attributs quand on crée l'objet. Dès qu'on crée un objet, cette methode est appelé.
On est obligé de l'appeler __construct (avec deux _)
public function __construct($fioul, $couleur)
{
echo"bateau crée";
$this->setFioul($fioul); //initialise le carburant avec la valeur de l'argument $fioul par la methode setFioul()
$this->setCouleur($couleur);
}
ici, on passe deux parametre au constructeur et qui va faire l'action selon notre code.
public function __construct($couleur)
{
echo"bateau crée mais y'a que la couleur qui change";
$this->setCouleur($couleur); //
}
si on fait
$surcouf2 = new Bateau(bleu);
//ou bien
$surcouf3 = new Bateau(1000, bleu);
Pour surcouf2 c'est le deuxieme constructeur (a 1 argument) qui seras appelé. Pour surcouf3 c'est le premier (a 2 argument)
Inclure des classes
Les classes sont dans des fichiers séparé du code a proprement dit, sinon on aurais vite de longues pages. Pour les utiliser, il faut déja dire quelle fichier doit etre chargé.
require 'bateau.php'; //La classe bateau qui est dans le fichier bateau.php est incluse
$surcouf = new Bateau(); // je peut creer un objet de cette classe.
Ca marche, mais si on a beaucoups de classe on a beaucoups d'inclusion. c'est pour ça qu'on as un autre moyen qui va chercher tout, toute seule.
function inclureClasse($classe) { require $classe . '.class.php'; //toutes les classe dans ce repretoire peuvent être chargés sur demande. } spl_autoload_register('inclureClasse'); //dé qu'on appel une classe non déclaré, elle seras incluse.
$surcouf = new Bateau(); //La classe Bateau marche $objet = new Classe(); //La classe Classe aussi