Académique Documents
Professionnel Documents
Culture Documents
en PHP
partie 1 : les bases
Dr N. BAME
Introduction
• Contrairement des langages comme Java ou C++, les premières
versions du langage PHP n’ont pas été conçues pour la POO
• Classe
• Objets
• Propriétés
• Méthodes
• Encapsulation
• Constructeur
• Destructeur
• …
Concept : Classe
• Une classe peut être vue comme une abstraction.
– C’est un modèle de donnée
– On peut la voir comme une famille d’objets
• Elle contient des propriétés et des méthodes :
Propriété = variable de classe
Méthode = fonction de classe
void __construct($arg1,…,argN)
Méthode :
– dite « méthode magique » comme toutes celles qui
commencent par « __ »
– porte le même nom, quelle que soit la classe, ce qui
permet des mises à jour sans avoir à modifier le nom du
constructeur
– ne retourne aucune valeur
– appelée automatiquement lors de la création de l’objet
Exemple
<?php class Etudiant
{
private $nom;
private $prenom;
Utilisation
• La propriété ou méthode est celle de la même classe, ou encore
self::$propriete self::maFonction()
• La propriété ou méthode est celle d’une autre classe.
nomclasse::$propriete nomclasse::maFonction()
• Notez qu’il faut conserver le signe $ pour désigner la propriété.
Remarques
• Si vous créez un objet instance de la classe, la
propriété déclarée static n’est pas accessible à
l’objet en écrivant le code $objet->propriete.
– A la place : $objet::$propriete
• Par contre, les méthodes statiques sont
accessibles par l’objet avec la syntaxe habituelle
$objet->méthode() ou avec $objet::méthode() .
• this vs self
– on utilise $ avant this mais pas avant l’attribut qui le suit
– on utilise $ avant l’attribut de la classe qui suit self mais
pas avant self
La méthode magique : __toString
• Soit
$pers1= new Personne(‘Mamadou’, ‘Ndiaye’)
echo $pers1;
• Si on essaye d’afficher cet objet dans la page ⇒ erreur fatale :
Object ofclass Personne could not be converted to string
function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');
?>
Héritage
Héritage
• L'héritage consiste à utiliser une classe parente et
une ou plusieurs classes filles qui héritent des
propriétés et méthodes de la classe parente.
• Exemple
– si vous avez une classe Vehicule,
– vous pouvez avoir une classe Voiture qui hérite de
certaines propriétés de la classe Vehicule,
– ainsi qu'une autre classe Moto qui va hériter de
certaines propriétés de la classe Voiture tout en
ajoutant des propriétés propres.
• Le mot utilisé pour dire à PHP qu'une classe hérite
d'une autre est le mot-clé extends.
Héritage
• L'héritage permet de hiérarchiser des classes.
Remarque
• Une classe ne peut hériter que d’une seule classe
• L’héritage multiple est donc non-autorisé.
Exemple d’héritage
<?php
class Thesard extends Etudiant
{
private $anneeThese;
private $NbArticles;
…
}
?>
Surcharge de méthodes
• En supposant une classe Voiture qui étend les
propriétés de la classe Vehicule,
• Nous pouvons surcharger le constructeur avec de
nouvelles propriétés qui cette fois seront propres à
la classe Voiture :
Attention
– Si vous surchargez une méthode, sa visibilité doit être
la même que dans la classe parente
• Si tel n'est pas le cas, une erreur fatale sera levée.
– Par exemple, vous ne pouvez pas surcharger une
méthode publique en disant qu'elle est privée.
parent
• Permet de réutiliser le code de la méthode de la super-
classe
• L’appel au constructeur de la super-classe n’est pas
implicite, il faut le spécifier :
class MySuperClass {
public function __construct($a) { instruction1 }
}
class MyClass extends MySuperClass
{
public function __construct($a) {
parent:: __construct($a - 1);
…
}
}
Exemple
class Vehicule
{
/*** Déclaration des attributs*/
protected $prix; //On souhaite que les classes qui en héritent puissent y accéder
/**
* Cette méthode un peu spéciale est le constructeur.
*/
public function __construct(int $prix_vehicule)
{
$this->prix = $prix_vehicule;
}
/**
* Cette méthode permet de modifier le prix du véhicule
*/
public function modifier_prix(int $nouveau_prix)
{
$this->prix = $nouveau_prix;
}
}
class Voiture extends Vehicule
{
/*** Déclaration des attributs*/
private $climatisation;
/*** Constructeur de la classe Voiture */
public function __construct( int $prix_vehicule, bool $clim)
{
//On appelle le constructeur de la classe Vehicule en lui fournissant
le prix
parent::__construct( $prix_vehicule );
$this->climatisation = $clim;
}
}
interface Courriel {
public function send( );
}
Interfaces
• Pour hériter d’une interface, on utilise le mot-clé
implements