## Modifications en POO (Programmation orientée objet)

Les changements du modèle objet de PHP sont recensés ici. Plus d'informations et autres notes peuvent être trouvées dans la documentation sur la POO en PHP.

Version | Description
--- | ---
8.4.0 | Ajout : Support pour les hooks de propriété.
8.4.0 | Ajout : Support des objets paresseux.
8.1.0 | Ajout : Support pour le modificateur final pour les constantes de classe. De plus, les constantes d'interfaces peuvent être redéfinies par défaut.
8.0.0 | Ajout : Support de l'opérateur nullsafe ?-> pour accéder aux propriétés et méthodes sur des objets qui peuvent être null.
7.4.0 | Changement : Il est désormais possible de lancer des exceptions au sein de __toString().
7.4.0 | Ajout : Support limité pour la covariance du type de retour et contravariance pour le type d'argument. Support complet de variance est uniquement disponible si l'autochargement est utilisé. À l'intérieur d'un fichier unique seul les références non-cyclique de type sont possibles.
7.4.0 | Ajout : Il est désormais possible de typer les propriétés de classe.
7.3.0 | Incompatibilité : Le déballage d'argument de Traversables avec des clés non-entieres n'est plus supporté. Ce comportement n'était pas prévu et par conséquent supprimé.
7.3.0 | Incompatibilité : Dans les versions précédentes il était possible de séparer les propriétés statiques en assignant une référence. Ceci a été supprimé.
7.3.0 | Changement : L'opérateur instanceof autorise désormais des littéraux comme premier opérande, dans ce cas le résultat est toujours `false`.
7.2.0 | Obsolète : La méthode __autoload() a été rendu obsolète en faveur de spl_autoload_register().
7.2.0 | Changement : Le nom suivant ne peut pas être utilisé pour nommer des classes, interfaces ou traits : `object`.
7.2.0 | Changement : Une virgule trainant peut désormais être ajouté à la syntaxe use groupé pour les espaces de noms.
7.2.0 | Changement : Élargissement du type des paramètres. Le type des paramètres des méthodes réécrite et d'implémentation d'interface peuvent désormais être omit.
7.2.0 | Changement : Les méthodes abstraites peuvent désormais être réécrite quand une classe abstraite étend une autre classe abstraite.
7.1.0 | Changement : Les noms suivant ne peuvent pas être utilisé pour nommer des classes, interfaces ou traits : `void` et `iterable`.
7.1.0 | Ajout : Il est désormais possible de définir la visibilité des constantes de classe.
7.0.0 | Obsolète : Appel statique à des méthodes qui ne sont pas déclarées comme statique.
7.0.0 | Obsolète : Constructeur style PHP 4. C.à.d. les méthodes qui ont le même nom que la classe dans laquelle elles sont définies.
7.0.0 | Ajout : Déclaration use groupé : les classes, fonctions et constantes qui sont importer depuis un même espace de nom peuvent désormais être groupé ensemble en une seule déclaration use.
7.0.0 | Ajout : Support pour les classes anonymes a été ajouté grâce à `new class`.
7.0.0 | Incompatibilité : Itérer sur un objet non- Traversable aura désormais le même comportement qu'itérer sur les tableaux par référence.
7.0.0 | Changement : La définition de propriétés (compatibles) dans deux traits utilisés ne déclenche plus d'erreur.
5.6.0 | Ajout : La methode __debugInfo().
5.5.0 | Ajout : La constante magique ::class.
5.5.0 | Ajout : finally pour gérer les exceptions.
5.4.0 | Ajout : traits.
5.4.0 | Changement : Si une classe abstraite définit une signature pour le constructeur , celle-ci sera désormais appliquée.
5.3.3 | Changement : Les méthodes ayant le même nom que le dernier élément dans un espace de noms ne sont plus considérées comme un constructeur. Ce changement n'affecte pas les classes sans espace de nom.
5.3.0 | Changement : Les classes qui implémentent une interface avec des méthodes ayant des valeurs par défaut définies dans leurs prototypes ne sont plus obligées de respecter les valeurs par défaut définies dans l'interface.
5.3.0 | Changement : Il est désormais possible de référencer une classe en utilisant une variable (e.g. : `echo $classname::constant;`). La valeur de la variable ne peut être un mot-clé (e.g. : `self`, `parent` ou `static`).
5.3.0 | Changement : Une erreur de niveau `E_WARNING` est émise si les méthodes magiques de surcharge sont déclarées comme statiques. La visibilité publique est aussi requise.
5.3.0 | Changement : Antérieur à 5.3.0, les exceptions lancées dans la fonction __autoload() ne pouvaient être traitées dans un bloc catch et résultaient en une erreur fatale. A présent, les exceptions lancées dans la fonction __autoload peuvent être attrapées dans un bloc catch et traitées. Si une exception personnalisée est lancée, alors sa classe doit être disponible. La fonction __autoload peut être utilisée récursivement pour autocharger la classe d'exception personnalisée.
5.3.0 | Ajout : La méthode __callStatic.
5.3.0 | Ajout : heredoc et nowdoc sont supportées pour définir les constantes de classes et les propriétés. Note : Les valeurs heredoc doivent suivre les mêmes règles que les chaîne de caractères entouré de guillemet double (e.g. pas de variable au sein).
5.3.0 | Ajout : Résolution Statique Tardive.
5.3.0 | Ajout : La méthode __invoke().
5.2.0 | Changement : La méthode __toString() n'était appelée que lors des appels à echo ou print. Désormais, elle est appelée dans n'importe quel contexte de chaîne de caractères (e.g. dans printf() avec le modificateur `%s`) mais pas dans les autres contextes (e.g. avec le modificateur `%d`). À partir de PHP 5.2.0, convertir un objet sans méthode __toString en chaîne de caractères émet une erreur `E_RECOVERABLE_ERROR`.
5.1.3 | Changement : Dans les versions antérieures de PHP 5, l'utilisation de `var` était considérée comme obsolète et émettait une erreur `E_STRICT`. Ce n'est plus le cas.
5.1.0 | Changement : La méthode statique __set_state() est désormais appelée pour les classes exportées via var_export().
5.1.0 | Ajout : Des méthodes __isset() et __unset().