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
visibilitecréez le répertoireclasses -
Dans ce répertoire, créez le fichier
Fichier.phppour définir la classeFichier.Cette classe doit avoir 2 propriétés privées :
$nomet$chemin. -
Ensuite, définissez le constructeur de la classe.
Le constructeur doit prendre 2 paramètres :
$nomet$chemin. Ce constructeur doit :- appeler une méthode privée
setNompour assigner$nomà la propriété privée$nom. - appeler une méthode privée
setCheminpour 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$nomet l'assigner à la propriété privée$nom. -
Définissez la méthode privée
setChemin. Cette méthode doit prendre un paramètre$cheminet l'assigner à la propriété privée$chemin. -
Enfin, définissez une méthode publique
creerqui utilise :- la fonction
mkdirpour créer le dossier au chemin spécifié ($chemin) - et la fonction
touchpour créer le fichier ($nom) à l'intérieur.
- la fonction
-
Dans le fichier
main.php:- créez une instance de la classe
Fichieren passant le nom et le chemin du fichier au constructeur ("monFichier.txt", "monDossier"). - et appelez ensuite la méthode
creerpour 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.