L'encapsulation est l'un des concepts fondamentaux de la programmation orientée objet, qui contribue à améliorer la maintenabilité et la réutilisation du code. En PHP, la réalisation de l'encapsulation repose principalement sur le contrôle d'accès, les méthodes Getter/Setter, les méthodes magiques et les classes wrapper.
PHP fournit trois modificateurs d'accès pour contrôler la portée d'accès des membres de la classe :
public : les membres sont accessibles de n'importe où
protégé : les membres ne sont accessibles que dans la classe actuelle et ses sous-classes
privé : le membre n'est accessible que dans la classe actuelle
class MyClass {
public $publicVar;
protected $protectedVar;
private $privateVar;
public function publicMethod() {
// Accessible de n'importe où
}
protected function protectedMethod() {
// Accessible uniquement dans la classe et les sous-classes actuelles
}
private function privateMethod() {
// Accessible uniquement dans la classe actuelle
}
}Afin de contrôler plus finement l’accès aux variables membres, nous pouvons utiliser les méthodes Getter et Setter. La méthode Getter est utilisée pour obtenir la valeur de la variable membre et la méthode Setter est utilisée pour définir la valeur de la variable membre. Dans le même temps, une vérification ou un traitement des données peut être effectué au cours du processus.
class MyClass {
private $name;
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
}PHP fournit des méthodes magiques spéciales pour la création, la destruction et l'accès aux propriétés d'objets. Les méthodes __get et __set fournissent une encapsulation lors de l'accès à des variables membres inexistantes ou inaccessibles.
class MyClass {
private $data = [];
public function __get($name) {
if (isset($this->data[$name])) {
return $this->data[$name];
} else {
throw new Exception("Property '$name' does not exist.");
}
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}Une classe wrapper peut encapsuler une ou plusieurs classes sous-jacentes et fournir une interface de niveau supérieur, masquant ainsi les détails d'implémentation spécifiques et rendant le code plus facile à utiliser.
class Database {
public function connect() {
// Se connecter à la base de données
}
public function query($sql) {
// Exécuter la requête
}
public function close() {
// Fermer la connexion à la base de données
}
}
class DatabaseWrapper {
private $database;
public function __construct(Database $database) {
$this->database = $database;
}
public function fetchData($sql) {
$this->database->connect();
$result = $this->database->query($sql);
$this->database->close();
return $result;
}
}La réalisation de l'encapsulation en PHP repose principalement sur le contrôle d'accès, les méthodes Getter et Setter, les méthodes magiques et les classes wrapper. Ces méthodes peuvent limiter efficacement l'accès aux détails internes de l'objet tout en fournissant une interface simple et facile à utiliser, améliorant ainsi la maintenabilité, la réutilisabilité et l'efficacité du développement du code.