Maison >développement back-end >tutoriel php >PHP, classes et objets
PHP, comme Java, prend en charge la programmation orientée objet et utilise des classes et des objets comme éléments de base. Comprendre ces concepts est essentiel pour maîtriser PHP. Ce guide couvrira tout ce que vous devez savoir sur les classes et les objets en PHP.
Une classe en PHP est un modèle pour créer des objets. Il définit la structure et le comportement qu'auront les objets de la classe.
class ClassName { // Properties (Fields) // Methods }
class Car { // Properties public $color; public $model; public $year; // Methods public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les objets sont des instances de classes. Vous créez un objet à partir d'une classe en utilisant le nouveau mot-clé.
$objectName = new ClassName();
class Main { public function run() { $myCar = new Car(); // Creating an object of the Car class $myCar->color = "Red"; $myCar->model = "Tesla"; $myCar->year = 2022; $myCar->displayInfo(); } } $main = new Main(); $main->run();
Les propriétés (également appelées champs) représentent l'état d'un objet, tandis que les méthodes définissent le comportement de l'objet.
Les propriétés sont des variables qui contiennent les données d'un objet.
class Car { public $color; public $model; public $year; }
Les méthodes sont des fonctions définies au sein d'une classe qui décrivent les comportements des objets.
class Car { public $color; public $model; public $year; public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les constructeurs sont des méthodes spéciales qui sont automatiquement appelées lorsqu'un objet est instancié. Ils initialisent l'objet nouvellement créé.
Si aucun constructeur n'est défini, PHP fournit un constructeur par défaut sans argument.
class Car { public $color; public $model; public $year; // Default constructor public function __construct() { } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Un constructeur paramétré permet d'initialiser un objet avec des valeurs spécifiques.
class Car { public $color; public $model; public $year; // Parameterized constructor public function __construct($color, $model, $year) { $this->color = $color; $this->model = $model; $this->year = $year; } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
class Main { public function run() { $myCar = new Car("Red", "Tesla", 2022); $myCar->displayInfo(); } } $main = new Main(); $main->run();
PHP ne prend pas nativement en charge la surcharge de méthodes comme Java, mais vous pouvez la simuler en utilisant des paramètres facultatifs ou en gérant les arguments manuellement au sein d'un seul constructeur.
class Car { public $color; public $model; public $year; // Simulating constructor overloading public function __construct($color = "Unknown", $model = "Unknown", $year = 0) { $this->color = $color; $this->model = $model; $this->year = $year; } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
class Main { public function run() { $defaultCar = new Car(); $defaultCar->displayInfo(); $myCar = new Car("Red", "Tesla", 2022); $myCar->displayInfo(); } } $main = new Main(); $main->run();
L'encapsulation en PHP est la pratique consistant à regrouper des données (propriétés) et des méthodes (fonctions) au sein d'une classe. Il garantit que l’état interne d’un objet est à l’abri des interférences extérieures et des utilisations abusives.
Les modificateurs d'accès en PHP contrôlent la visibilité et l'accessibilité des propriétés, des méthodes et des constructeurs. PHP prend en charge trois modificateurs d'accès principaux :
class ClassName { // Properties (Fields) // Methods }
Les membres statiques en PHP sont associés à la classe elle-même plutôt qu'à une instance spécifique. Ils sont accessibles sans créer d'objet de la classe.
Les propriétés statiques sont partagées entre toutes les instances d'une classe. Ils sont déclarés à l'aide du mot-clé static.
class Car { // Properties public $color; public $model; public $year; // Methods public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les méthodes statiques sont déclarées à l'aide du mot-clé static. Ils appartiennent à la classe plutôt qu'à une instance.
$objectName = new ClassName();
Les membres statiques sont accessibles en utilisant le nom de la classe, et non via un objet.
class Main { public function run() { $myCar = new Car(); // Creating an object of the Car class $myCar->color = "Red"; $myCar->model = "Tesla"; $myCar->year = 2022; $myCar->displayInfo(); } } $main = new Main(); $main->run();
Les modificateurs d'accès en PHP contrôlent la visibilité des membres de la classe, garantissant l'encapsulation et appliquant les restrictions d'accès.
class Car { public $color; public $model; public $year; }
class Car { public $color; public $model; public $year; public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
class Car { public $color; public $model; public $year; // Default constructor public function __construct() { } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les modificateurs de non-accès en PHP modifient le comportement des membres de la classe sans affecter leur visibilité.
class ClassName { // Properties (Fields) // Methods }
class Car { // Properties public $color; public $model; public $year; // Methods public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
$objectName = new ClassName();
L'héritage en PHP est un mécanisme par lequel une classe (sous-classe) peut hériter des propriétés et méthodes d'une autre classe (superclasse). Il facilite la réutilisation du code et permet la création d'une relation hiérarchique entre les classes.
class Main { public function run() { $myCar = new Car(); // Creating an object of the Car class $myCar->color = "Red"; $myCar->model = "Tesla"; $myCar->year = 2022; $myCar->displayInfo(); } } $main = new Main(); $main->run();
class Car { public $color; public $model; public $year; }
Dans cet exemple :
Les modificateurs d'accès en PHP déterminent la visibilité des membres de la classe dans les sous-classes et d'autres parties du programme. Ils jouent un rôle clé dans l'héritage.
class Car { public $color; public $model; public $year; public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les membres statiques en PHP sont associés à la classe plutôt qu'à une instance spécifique. Ils suivent les mêmes règles d'accès que les membres non statiques en héritage.
class Car { public $color; public $model; public $year; // Default constructor public function __construct() { } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les méthodes statiques sont héritées en PHP mais ne peuvent pas être remplacées dans le même sens que les méthodes d'instance. Lorsqu'une sous-classe définit une méthode statique du même nom, elle masque la méthode statique de la classe parent.
class ClassName { // Properties (Fields) // Methods }
Les méthodes abstraites en PHP doivent être définies dans des classes abstraites. La visibilité d'une méthode abstraite dans la superclasse détermine sa visibilité dans les sous-classes. Les sous-classes doivent implémenter des méthodes abstraites avec des modificateurs d'accès identiques ou moins restrictifs.
class Car { // Properties public $color; public $model; public $year; // Methods public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les méthodes finales en PHP ne peuvent pas être remplacées par des sous-classes et les classes finales ne peuvent pas être étendues.
$objectName = new ClassName();
En PHP, la déclaration des classes de premier niveau (classes non imbriquées dans d'autres classes) suit un ordre précis de mots-clés. La déclaration peut inclure des modificateurs d'accès, des mots-clés abstraits ou finaux et le mot-clé class.
class ClassName { // Properties (Fields) // Methods }
class Car { // Properties public $color; public $model; public $year; // Methods public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
$objectName = new ClassName();
class Main { public function run() { $myCar = new Car(); // Creating an object of the Car class $myCar->color = "Red"; $myCar->model = "Tesla"; $myCar->year = 2022; $myCar->displayInfo(); } } $main = new Main(); $main->run();
class Car { public $color; public $model; public $year; }
class Car { public $color; public $model; public $year; public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
class Car { public $color; public $model; public $year; // Default constructor public function __construct() { } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
class Car { public $color; public $model; public $year; // Parameterized constructor public function __construct($color, $model, $year) { $this->color = $color; $this->model = $model; $this->year = $year; } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
class Main { public function run() { $myCar = new Car("Red", "Tesla", 2022); $myCar->displayInfo(); } } $main = new Main(); $main->run();
Les classes abstraites en PHP sont similaires à leurs homologues en Java, utilisées pour définir un plan pour d'autres classes. Ils contiennent à la fois des méthodes abstraites (méthodes sans implémentation) et des méthodes concrètes (méthodes avec implémentation). Les classes abstraites sont déclarées à l'aide du mot-clé abstract et ne peuvent pas être instanciées directement.
Une classe abstraite sert de classe de base pour les classes dérivées. Il définit des comportements communs pour ses sous-classes tout en permettant l'implémentation de méthodes spécifiques dans ces sous-classes.
Pour déclarer une classe abstraite en PHP, utilisez le mot-clé abstract avant le mot-clé class.
class ClassName { // Properties (Fields) // Methods }
Les méthodes abstraites sont définies dans la classe abstraite mais n'ont pas de corps. Les sous-classes doivent implémenter toutes les méthodes abstraites.
class Car { // Properties public $color; public $model; public $year; // Methods public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les méthodes concrètes d'une classe abstraite ont un corps et peuvent être héritées par les sous-classes telles quelles ou remplacées.
$objectName = new ClassName();
Les sous-classes d'une classe abstraite doivent implémenter toutes ses méthodes abstraites à moins que la sous-classe ne soit également déclarée comme abstraite.
class Main { public function run() { $myCar = new Car(); // Creating an object of the Car class $myCar->color = "Red"; $myCar->model = "Tesla"; $myCar->year = 2022; $myCar->displayInfo(); } } $main = new Main(); $main->run();
Les classes abstraites ne peuvent pas être instanciées directement. Vous devez utiliser une sous-classe concrète pour créer une instance.
class Car { public $color; public $model; public $year; }
Les classes abstraites peuvent avoir des constructeurs, et leurs constructeurs sont appelés lorsqu'une sous-classe est instanciée.
class Car { public $color; public $model; public $year; public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les classes abstraites peuvent inclure des variables d'instance et des méthodes concrètes, fournissant des fonctionnalités réutilisables pour les sous-classes.
class Car { public $color; public $model; public $year; // Default constructor public function __construct() { } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les classes abstraites peuvent contenir des méthodes statiques. Les méthodes statiques appartiennent à la classe et peuvent être appelées sans l'instancier.
class ClassName { // Properties (Fields) // Methods }
class Car { // Properties public $color; public $model; public $year; // Methods public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
$objectName = new ClassName();
class Main { public function run() { $myCar = new Car(); // Creating an object of the Car class $myCar->color = "Red"; $myCar->model = "Tesla"; $myCar->year = 2022; $myCar->displayInfo(); } } $main = new Main(); $main->run();
Une interface en PHP définit un contrat pour les classes qui l'implémentent. Il spécifie les méthodes qu'une classe doit implémenter, mais ne fournit aucune implémentation de méthode elle-même. Les interfaces permettent un code plus flexible et modulaire, permettant aux classes d'adhérer à un ensemble commun de signatures de méthodes, quelle que soit leur hiérarchie d'héritage.
Une interface en PHP est similaire à une classe abstraite, mais elle ne peut définir que des signatures de méthodes sans aucune implémentation. Une classe qui implémente une interface doit fournir les implémentations de toutes les méthodes déclarées dans l'interface. Une classe peut implémenter plusieurs interfaces, ce qui fait des interfaces un élément clé de la prise en charge par PHP de l'héritage multiple de comportement.
Pour déclarer une interface, utilisez le mot-clé interface. Les interfaces ne peuvent contenir que des déclarations de méthodes (pas de corps de méthode), des constantes et des méthodes abstraites.
class Car { public $color; public $model; public $year; }
Une classe qui implémente une interface doit fournir des implémentations pour toutes les méthodes déclarées dans l'interface. Une classe peut implémenter plusieurs interfaces, en les séparant par des virgules.
class Car { public $color; public $model; public $year; public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Les méthodes dans les interfaces ne peuvent pas avoir de corps et elles doivent être publiques. Lorsqu'une classe implémente une interface, elle doit implémenter ces méthodes exactement comme déclarées dans l'interface, y compris la signature de la méthode.
class Car { public $color; public $model; public $year; // Default constructor public function __construct() { } public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Une classe en PHP peut implémenter plusieurs interfaces. Cela permet plus de flexibilité dans la conception de systèmes dans lesquels les classes peuvent adhérer à différents contrats.
class ClassName { // Properties (Fields) // Methods }
Les interfaces peuvent contenir des constantes. Ces constantes sont automatiquement publiques et accessibles par toute classe qui implémente l'interface.
class Car { // Properties public $color; public $model; public $year; // Methods public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Une interface peut étendre une autre interface. Cela signifie que l'interface enfant hérite de toutes les méthodes (signatures) de l'interface parent et peut également ajouter de nouvelles méthodes. Une classe implémentant l'interface enfant doit implémenter toutes les méthodes des interfaces parent et enfant.
$objectName = new ClassName();
Les interfaces ne peuvent pas contenir de méthodes statiques. Toutes les méthodes déclarées dans une interface doivent être des méthodes d'instance. Les méthodes statiques ne sont pas autorisées dans les interfaces, car les interfaces définissent des contrats au niveau de l'instance pour les classes d'implémentation.
class Main { public function run() { $myCar = new Car(); // Creating an object of the Car class $myCar->color = "Red"; $myCar->model = "Tesla"; $myCar->year = 2022; $myCar->displayInfo(); } } $main = new Main(); $main->run();
class Car { public $color; public $model; public $year; }
class Car { public $color; public $model; public $year; public function displayInfo() { echo "Model: " . $this->model . "\n"; echo "Color: " . $this->color . "\n"; echo "Year: " . $this->year . "\n"; } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!