Exemple de classe abstraite:
<?php
abstract class Animal
{
protected $nom;
public function __construct($nom)
{
$this->nom = $nom;
}
abstract public function parler();
}
class Chien extends Animal
{
public function parler()
{
echo "$this->nom: Wouf Wouf\n";
}
}
class Chat extends Animal
{
public function parler()
{
echo "$this->nom: Miaou\n";
}
}
$chien = new Chien("Rex");
$chien->parler(); // Rex: Wouf Wouf
$chat = new Chat("Sac-a-puces");
$chat->parler(); // Sac-a-puces: Miaou
Par opposition, une classe qui définit l’intégralité de ses comportements est souvent appellé classe concrête.
<?php
interface estAffichable {
function affiche();
}
interface estImprimable {
function imprime($nbreFois);
}
abstract class Vehicule {
public $nombreRoues;
function affiche() {
return "vehicule : nbre roues " . $this->nombreRoues;
}
}
class Voiture extends Vehicule implements estAffichable, estImprimable {
public $tailleCoffre;
function imprime($nbreFois) {
for ($i =0; $i < $nbreFois; $i++) {
echo $this->affiche();
echo "<br>";
}
}
function affiche() {
return parent::affiche() . " voiture : taille du coffre " .
$this->tailleCoffre;
}
}
$maVoiture = new Voiture();
$maVoiture->tailleCoffre=300;
$maVoiture->nombreRoues=4;
$maVoiture->imprime(2);
<?php
interface estAffichable {
function affiche();
}
interface estImprimable {
function imprime($nbreFois);
}
abstract class Vehicule {
public $nombreRoues;
function affiche() {
return "vehicule : nbre roues " . $this->nombreRoues;
}
}
class Voiture extends Vehicule implements estAffichable, estImprimable {
public $tailleCoffre;
function imprime($nbreFois) {
for ($i =0; $i < $nbreFois; $i++) {
echo $this->affiche();
echo "<br>";
}
}
function affiche() {
return parent::affiche() . " voiture : taille du coffre " .
$this->tailleCoffre;
}
}
function imprimante(estImprimable $imprimable) { // prend une interface comme paramètre
$imprimable->imprime(3);
}
$maVoiture = new Voiture();
$maVoiture->tailleCoffre=300;
$maVoiture->nombreRoues=4;
imprimante($maVoiture); // casting d'un objet dans son interface !!!
final class Voiture {
public $tailleCoffre;
final function afficher() {
echo "vehicule : nbre roues " . $this->nombreRoues;
}
}
<?php
class Voiture {
function test() {
echo "test";
}
}
echo Voiture::test();
Déclaration « static » d’un attribut ou d’une méthode
Éléments « static » ne sont appelables que sur la classe seulement
$this ne peut pas être employé (car pas défini, puisque pas d’objet)
$self désigne la classe elle-même
<?php
class Voiture {
static $roues = 4;
static function test() {
return self::$roues;
}
}
echo Voiture::$roues++; // update class attribute
echo Voiture::test();
// affiche 4 5
<?php
class Voiture {
function test() {
echo "classe : " . __CLASS__ . ", methode : " . __METHOD__ ;
}
}
$voiture = new Voiture();
$voiture->test();
<?php
class Voiture {
function __toString() {
return "ceci est une voiture";
}
}
$voiture = new Voiture();
echo $voiture;
<?php
function __autoload($nom) {
require_once($nom . ".class.php");
}
$voiture = new Voiture();
echo $voiture;
Attention, maintenant d’utiliser l’autoload de composer (PSR4).