POO, visibilité d’une classe
La visibilité permet de définir le champ d’utilisation des propriétés et des méthodes d’une classe. Il existe trois niveaux de visibilité :
public : propriétés ou méthodes accessibles au niveau de l’objet , de la classe et des classes étendues (extends).
class Bouteille{
public $marque = "coca-cola";
}
$mabouteille = new Bouteille();
echo $mabouteille->marque;
Affichage
coca-cola
private : propriétés ou méthodes accessibles seulement au niveau de la classe qui les a défini mais pas au niveau des objets, ni au niveau des classes étendues (extends).
class Bouteille{
private $marque = "coca-cola";
public function info(){
echo $this->marque;
}
}
$mabouteille = new Bouteille();
echo $mabouteille->marque; // affiche une erreur
$mabouteille->info(); // affiche 'coca-cola'
Affichage
Fatal error: Cannot access private property Bouteille1::$marque
coca-cola
protected : propriétés ou méthodes accessibles au niveau de la classe qui les a défini, au niveau des classes étendues (extends), mais pas au niveau des objets.
class Bouteille{
private $marque = "coca-cola";
protected $volume = "1.5L";
public function info(){
echo $this->marque;
}
}
class canette extends Bouteille{
public function info(){
echo $this->volume; // propriété accéssible dans la classe enfant
}
}
$unecanette= new canette();
echo $unecanette->volume; // affiche une erreur
$unecanette->info();
Affichage
Fatal error: Cannot access protected property canette::$volume
1.5L
final : si une méthode est définie comme final, elle ne pourra pas être surchargée par les classes filles. Si une classe est définie comme final, elle ne pourra pas être étendue.
final class Bouteille{
private $marque = "coca-cola";
protected $volume = "1.5L";
public function info(){
echo $this->marque;
}
}
class canette extends Bouteille{ // erreur fatale
}
Affichage
Fatal error: Cannot redeclare class canette