L'héritage est un principe fondamental de la programmation orientée objet, elle permet à une nouvelle classe de posséder les caractéristiques d'une autre appelée super-classe ou classe générique. La classe ayant héritée d'une autre, est quant à elle dénommée sous-classe, classe étendue ou classe dérivée

L'héritage de classe se réalise par l'intermédiaire de l'instruction extends.

class super_classe
{
  // Déclarations des attributs
  var $attribut_1;
  var $...
  var $attribut_N;

  // Déclarations des fonctions
  function nom_fonction_1 (param_1, ..., param_N)
  {
  //bloc d'instructions...
  }
  ...
  function nom_fonction_N (param_1, ..., param_N)
  {
  //bloc d'instructions...
  }
}

class sous_classe extends super_classe
{
  // Déclarations des nouveaux attributs
  var $attribut_1;
  var $...
  var $attribut_N;

  // Déclarations des nouvelles fonctions
  function nom_fonction_1 (param_1, ..., param_N)
  {
  //bloc d'instructions...
  }
  ...
  function nom_fonction_N (param_1, ..., param_N)
  {
  //bloc d'instructions...
  }
}

Une classe dérivée hérite de l'ensemble des membres de sa super-classe. La sous-classe peut ainsi définir de nouveaux membres qui ajouteront de nouvelles fonctionnalités à celles existantes, mais aussi de redéfinir des membres hérités à l'aide de la surcharge.

Le langage PHP ne supporte pas l'héritage multiple, c'est-à-dire qu'une classe ne peut hériter que d'une seule et unique classe.

Exemple [voir]
<html>
<body>
<?php
class Chaine {
   public $valeur;
   public $date;
   public function __construct(){
      $this->valeur = func_get_arg(0);
      $this->date = date(Personne::MASQUE_DATE);
   }
   public function set($valeur){
      $this->valeur = $valeur;
   }
   public function get(){
      return $this->valeur;
   }
   public function __toString(){
     return '[' . $this->valeur . ']';
   }
}
class Personne {
   const MASQUE_DATE = 'd M Y H:i:s';
   static $compteur;
   private $date_inscription;
   private $date_modification;
   private $id;
   private $civilite;
   private $nom;
   private $prenom;
   private $adresse;
   private $telephone;
   public function __construct(
                            $civilite,
                            $nom,
                            $prenom,
                            $adresse,
                            $telephone){
      $this->date_inscription = new Chaine(date(self::MASQUE_DATE));
      $this->civilite = new Chaine($civilite);
      $this->nom = new Chaine($nom);
      $this->prenom = new Chaine($prenom);
      $this->adresse = new Chaine($adresse);
      $this->telephone = new Chaine($telephone);
      $this->date_modification = new Chaine($this->date_inscription->get());
      $this->idModif();
   }
   
   public function __toString(){
    return '[' . $this->civilite->get() . ', '
               . $this->nom->get() . ', '
               . $this->prenom->get() . ', '
               . $this->adresse->get() . ', '
               . $this->telephone->get() . ', '
               . $this->date_inscription->get() . ', '
               . $this->date_modification->get() . ', '
               . $this->id->get() . ']';
   }
   public function setNom($nom){
      $this->nom->set($nom);
      $this->dateModif();
      $this->idModif();
   }
   public function setPrenom($prenom){
      $this->prenom->set($prenom);
      $this->dateModif();
      $this->idModif();
   }
   public function setAdresse($adresse){
      $this->adresse->set($adresse);
      $this->dateModif();
   }
   public function setTelephone($telephone){
      $this->telephone->set($telephone);
      $this->dateModif();
   }
   private function dateModif(){
      $this->date_modification->set(date(self::MASQUE_DATE));
   }
   private function idModif(){
      $this->id = new Chaine(self::$compteur++ . date('dmy') 
                           . '.' . $this->nom->get() 
                           . '_' . substr($this->prenom, 0, 1));
   }

   public function __clone(){
      $this->date_inscription = new Chaine(date(self::MASQUE_DATE));
      $this->civilite = new Chaine($this->civilite->get());
      $this->nom = new Chaine($this->nom->get());
      $this->prenom = new Chaine($this->prenom->get());
      $this->adresse = new Chaine($this->adresse->get());
      $this->telephone = new Chaine($this->telephone->get());
      $this->date_modification = new Chaine($this->date_inscription->get());
      $this->idModif();
   }
}
class Employe extends Personne {
   public $specialite;
   public $service;
   public $date_embauche;
   public function __construct($civilite,
                              $nom,
                              $prenom,
                              $adresse,
                              $telephone,
                              $specialite,
                              $service){
      //Appel du constructeur de la super-classe à l'aide de parent::
      parent::__construct($civilite,
                          $nom,
                          $prenom,
                          $adresse,
                          $telephone);
      $this->specialite = new Chaine($specialite);
      $this->service = new Chaine($service);
      $this->date_embauche = new Chaine(date(parent::MASQUE_DATE));
   }
   //Surcharge
   public function __toString(){
      //Appel d'une méthode de la super-classe à l'aide de parent::
      return '[' . parent::__toString() .', '
                 . $this->specialite->get() . ', '
                 . $this->service->get() . ', '
                 . $this->date_embauche->get() . ']';
   }
}
$employe = new Employe(
                     'Madame', 
                     'Waldec', 
                     'Anne', 
                     '75 rue Belleville 75010 Paris', 
                     '0142152432',
                     'Analyste/programmeur',
                     'Recherche et développement');

echo $employe;
?>
</body>
</html>