La programmation orientée objet (POO), ou programmation par objet, est un paradigme de programmation informatique élaboré par les Norvégiens Ole-Johan Dahl et Kristen Nygaard au début des années 1960 et poursuivi par les travaux d’Alan Kay dans les années 1970. Il consiste en la définition et l’interaction de briques logicielles appelées objets ; un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d’un livre. Il possède une structure interne et un comportement, et il sait interagir avec ses pairs. Il s’agit donc de représenter ces objets et leurs relations ; l’interaction entre les objets via leurs relations permet de concevoir et réaliser les fonctionnalités attendues, de mieux résoudre le ou les problèmes. Dès lors, l’étape de modélisation revêt une importance majeure et nécessaire pour la POO. C’est elle qui permet de transcrire les éléments du réel sous forme virtuelle
- Mot-clef: class
- Syntaxe : class <nomClasse> { }
- Peut être défini n’importe où
- Est un « type », construit par le programmeur
class Voiture {
// contenu
}
- Déclarés comme public, private ou protected, mais ne sont pas typés !
- Avec une valeur affectée (valeur par défaut)
- Constitueront les « données » de l’objet instantié
class Voiture {
public $marque = Null;
public $puissance = "2CV";
}
- Se déclarent comme des fonctions
- Une seule méthode du même nom par classe (pas de surcharge !!!)
- Peuvent prendre des paramètres, qui peuvent être typés . On ne peut que typer des paramètres de fonction par des objets (et pas des types de base).
- Peuvent retourner une valeur.
class Voiture {
function donneConso() {
return 30;
}
}
class Voiture {
function donneConso($nbreKm){
return 30 * $nbreKm;
}
}
- Définir des constantes locales à une classe.
- Se déclare avec const et sans le symbole $
- Par convention, en majuscule
class Voiture {
const PROPULSION = 1;
const TRACTION = 2;
}
$<nomObjet> = new <nomClasse>[()];
Un objet est une instance de classe (une variable dont le type est la classe)
La classe doit être déclarée, avant d’être instantiée
$bagnole = new Voiture();
Exemple complet :
class Voiture {
public $marque;
public $puissance = "2CV";
}
$bagnole = new Voiture();
echo $bagnole->puissance;
echo $bagnole->attributVide;
On peut même avoir:
$objet->methode()->methode();
// en PHP 7 on peut même aller plus loin
$bagnole = (new Voiture())->donneConso(15);
<?php
class Voiture {
public $nbreLitre = 30;
function donneConso($nbreKm) {
return $this->nbreLitre * $nbreKm;
}
function donneConsoAnnuelle($nbreKm,$nbreJours=20) {
return $this->donneConso($nbreKm) * $nbreJours;
}
}
$uneVoiture = new Voiture;
echo $uneVoiture->donneConsoAnnuelle(10);
=> __construct()
<?php
class Date {
public $jour;
public $mois;
public $annee;
function __construct($jour,$mois,$annee) {
$this->jour = $jour;
$this->mois = $mois;
$this->annee = $annee;
echo 'objet créé';
}
function __destruct() {
echo 'objet detruit';
}
}
$monAnniversaire = new Date(18,4,1911);
echo $monAnniversaire->jour . "/" . $monAnniversaire->mois . "/" . $monAnniversaire->annee;
unset($monAnniversaire);
<?php
class Date {
public $jour;
public $mois;
public $annee;
}
$monAnniversaire = new Date();
$monAnniversaire->jour = 18;
$monAnniversaire->mois = 4;
$monAnniversaire->annee = 1911;
$tonAnniversaire = $monAnniversaire;
$tonAnniversaire->annee = 1982;
echo $tonAnniversaire->annee; // affiche 1982
echo "<br />";
echo $monAnniversaire->annee; // affiche aussi 1982
<?php
class Date {
public $jour;
public $mois;
public $annee;
}
$monAnniversaire = new Date();
$monAnniversaire->jour = 18;
$monAnniversaire->mois = 4;
$monAnniversaire->annee = 1911;
$unAnniversaire = new Date();
$unAnniversaire->jour = 18;
$unAnniversaire->mois = 4;
$unAnniversaire->annee = 1911;
$tonAnniversaire = $monAnniversaire;
if ($monAnniversaire == $tonAnniversaire)
echo "monAnniversaire == tonAnniversaire";
if ($monAnniversaire === $tonAnniversaire)
echo "monAnniversaire === tonAnniversaire";
if ($monAnniversaire == $unAnniversaire)
echo "monAnniversaire == unAnniversaire";
if ($monAnniversaire === $unAnniversaire)
echo "monAnniversaire === unAnniversaire";
clone un objet
<?php
class Date {
public $jour;
public $mois;
public $annee;
}
$monAnniversaire = new Date();
$monAnniversaire->jour = 18;
$monAnniversaire->mois = 4;
$monAnniversaire->annee = 1911;
$tonAnniversaire = clone $monAnniversaire;
echo $tonAnniversaire->jour . "/" . $tonAnniversaire->mois . "/" . $tonAnniversaire->annee;
méthode clone
<?php
class Date {
public $jour;
public $mois;
public $annee;
function __clone() {
$this->jour +=1;
$this->mois +=1;
$this->annee +=1;
}
}
$monAnniversaire = new Date();
$monAnniversaire->jour = 18;
$monAnniversaire->mois = 4;
$monAnniversaire->annee = 1911;
$tonAnniversaire = clone $monAnniversaire;
echo $tonAnniversaire->jour . "/" . $tonAnniversaire->mois . "/" . $tonAnniversaire->annee;