Les 3 visibilités
Partie théorique
Pour cacher, ou rendre visible les détails internes d'une classe, on utilise un des 3 mots clés suivants : public
, protected
ou private
.
Ces mots-clés déterminent où ces propriétés et méthodes peuvent être accédées.
public
: La propriété ou la méthode peut être accédée de n'importe où.protected
: La propriété ou la méthode peut être accédée depuis la classe elle-même et ses héritières.private
: La propriété ou la méthode peut uniquement être accédée depuis la classe elle-même.
Lorsque l'on cache les détails internes d'une classe pour contrôler l'accès à ses propriétés, on dit que l'on encapsule les données de la classe.
Exemple pratique
Une classe Voiture
class Voiture {
public $marque;
protected $couleur;
private $vitesse;
public function __construct($marque, $couleur, $vitesse) {
$this->marque = $marque;
$this->couleur = $couleur;
$this->vitesse = $vitesse;
}
public function afficherMarque() {
print($this->marque);
print("\n");
}
protected function afficherCouleur() {
print($this->couleur);
print("\n");
}
private function afficherVitesse() {
print($this->vitesse);
print("\n");
}
}
$voiture = new Voiture("Peugeot", "rouge", "150 km/h");
$voiture->afficherMarque(); // fonctionne
$voiture->afficherCouleur(); // génère une erreur
$voiture->afficherVitesse(); // génère une erreur
Une classe VoitureEssence
class VoitureEssence extends Voiture {
protected function afficherCouleur() {
print($this->couleur);
print("\n");
}
private function afficherDetails() {
print($this->afficherMarque); // Possible car `public`
print($this->afficherCouleur); // Possible car `protected`
//print($this->afficherVitesse); //Génère une erreur car `private`
}
}
$voiture2 = new VoitureEssence("Renault", "grise", "140 km/h");
$voiture2->afficherDetails();
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Dans ce TP, vous allez créer une classe Fichier
.
Les étapes pour réaliser ce TP sont les suivantes :
-
Dans votre répertoire "Documents" créez le répertoire
tp_visibilite
. -
Dans ce répertoire, créez le fichier
autoload.php
:<?php
spl_autoload_register(function($class) {
require 'classes/' . $class . '.php';
}); -
Dans ce répertoire, créez le fichier
main.php
:<?php
include 'autoload.php';
// Les 3 visibilités
print("Les 3 visibilités \n\n"); -
Testez le fonctionnement de ce fichier :
php main.php
-
Dans le répertoire
visibilite
créez le répertoireclasses
-
Dans ce répertoire, créez le fichier
Fichier.php
pour définir la classeFichier
.Cette classe doit avoir 2 propriétés privées :
$nom
et$chemin
. -
Ensuite, définissez le constructeur de la classe.
Le constructeur doit prendre 2 paramètres :
$nom
et$chemin
. Ce constructeur doit :- appeler une méthode privée
setNom
pour assigner$nom
à la propriété privée$nom
. - appeler une méthode privée
setChemin
pour assigner$chemin
à la propriété privée$chemin
.
- appeler une méthode privée
-
Définissez la méthode privée
setNom
. Cette méthode doit prendre un paramètre$nom
et l'assigner à la propriété privée$nom
. -
Définissez la méthode privée
setChemin
. Cette méthode doit prendre un paramètre$chemin
et l'assigner à la propriété privée$chemin
. -
Enfin, définissez une méthode publique
creer
qui utilise :- la fonction
mkdir
pour créer le dossier au chemin spécifié ($chemin
) - et la fonction
touch
pour créer le fichier ($nom
) à l'intérieur.
- la fonction
-
Dans le fichier
main.php
:- créez une instance de la classe
Fichier
en passant le nom et le chemin du fichier au constructeur ("monFichier.txt", "monDossier"). - et appelez ensuite la méthode
creer
pour créer le fichier. - Code du fichier
main.php
:
include 'autoload.php';
// Les 3 visibilités
print("Les 3 visibilités \n\n");
$fichier = new Fichier("monFichier.txt", "monDossier");
$fichier->creer(); - créez une instance de la classe
Voici une présentation des fonctions PHP de gestion de fichiers et de répertoires que nous utilisons dans ce TP :
-
touch($filename)
: Cette fonction permet de créer facilement un fichier.https://www.php.net/manual/fr/function.touch.php Elle tente de définir l'heure d'accès et de modification du fichier nommé dans le paramètre
filename
. Si le fichier n'existe pas, la fonctiontouch()
tente de le créer. -
mkdir($pathname)
: Cette fonction tente de créer un répertoire nommépathname
.https://www.php.net/manual/fr/function.mkdir.php La fonction renvoie TRUE en cas de succès, FALSE en cas d'échec.
Une solution
Vous devez être connecté pour voir le contenu.