Le B.A. BA de la POO en PHP

, par Christophe


Définitions :
==============

## **Un objet :**
> Un « objet » est une représentation d’une chose matérielle ou immatérielle du réel à laquelle on associe des propriétés et des actions.
> exemple : **un véhicule** , une personne, un animal, un compte bancaire, ...

## **Une Classe :**
> contient la définition de l’objet que l’on va creer = c’est le plan de fabrication d’un objet

class Vehicule // Présence du mot-clé class suivi du nom de la classe.
{
  // Déclaration des attributs et méthodes ici.
}

## **Les Attributs (variables) :**
> caractéristiques propres à un objet.
> exemple : nom, prénom, couleur, ...

class Vehicule
{
	private $nombre_roues = 4; // nombre de roues du véhicule, par défaut = 4
	private $couleur = 'vert'; // couleur du véhicule;
	private $nom;
}

## **Les Methodes (fonctions) :**
> Des actions que l’on peut appliquer à un objet

class Vehicule
{
	private $nombre_roues = 4; // nombre de roues du véhicule, par défaut = 4
	private $couleur = 'vert'; // couleur du véhicule;
	private $nom;
	private $niveau_carburant = 100

	public fonction klaxonner() // une méthode pour faire du bruit
	{
		echo "tut tut";
	}
}

## **Instance de classe = résultat d’une instanciation = création d’un objet**
> exemple : un tricyle est crée à partir de l’objet **véhicule**

$tricyle = new Vehicule();

// initialisation des variables
$tricyle->nombre_roues = 3;
$tricyle->couleur = 'rouge';
$tricyle->nom = 'velo_toto';

// execution d'une fonction
$tricyle->klaxonner(); // faire du bruit

## **function __construct()**
> Permet de sauvegarder les variables passées en argument lors de l’instanciation

class Vehicule {
	public nom;

	public function __construct($recup_nom = 'pas encore de nom'){
		$this->nom = $recup_nom;
	}
}

$tricyle = new Vehicule("Mon_Super_Tricycle");
echo "le nom de mon tricyle = ".$tricycle->$nom; // donnera la valeur : Mon_Super_Tricycle;

## **Visibilite public / private / protected**

 **public**, permet d’indiquer que la propriété ou la méthode sera accessible à l’intérieur mais aussi à l’extérieur de la classe
 **private**, permet d’indiquer que la propriété ou la méthode sera accessible à l’intérieur de la classe seulement
 **protected**, permet d’indiquer que la propriété ou la méthode sera accessible à l’intérieur de la classe et des classes héritées

Quelques petites précisions :

 Si une propriété est déclarée en utilisant le mot clef **var**, elle sera définie comme publique
 Si une méthode est déclarée sans visibilitée, elle sera définie comme publique

## **Accéder à un attribut : l’accesseur ou getter**
> création de methodes qui ont comme seul role d’afficher un attribut private

class Vehicule {
	private nom;

	public function __construct($recup_nom = 'pas encore de nom'){
		$this->nom = $recup_nom;
	}

	public fonction getNom(){
		return $this->nom;
	}
}

$tricyle = new Vehicule("Mon_Super_Tricycle");
echo $tricycle->nom; // Error, $nom => private
echo $tricylce->getNom(); // affiche : Mon_Super_Tricycle;

## **Modifier un attribut : mutateur ou setter**
> création de methode qui ont comme seul role de modifier un attribut private d’un objet

class Vehicule {
	private nom;
	private roues = 4;

	public function __construct($recup_nom = 'pas encore de nom'){
		$this->nom = $recup_nom;
	}

	public fonction getRoues(){
		return $this->roues;
	}

	public function setRoues($nombre_roues){
		if(is_int($nombre_roues) && $nombre_roues > 0 && $nombre_roues < 10){
			$this->roues = $nombre_roues;
		}
		else {
			trigger_error('Le nombre de roue est invalide', E_USER_WARNING);
		}
	}
}

$tricycle = new Vehicule("Mon_Super_Tricycle");
$tricycle->setRoues(3);
echo $tricycle->getRoues; // affiche 3

$tricycle->setRoues(11);
echo $tricycle->getRoues; // Warning : le nombre de roues est invalide

## **Exemple complet**