Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

C - Interfaces natives et méthodes magiques

Deux tables de référence : les interfaces SPL qui branchent vos objets sur les mécanismes intégrés du langage, et les méthodes magiques qui permettent à vos objets de s’insérer dans un comportement que PHP gérerait sinon tout seul.

Interfaces natives

InterfaceCe que son implémentation vous apporte
CountableVos objets fonctionnent avec count()
ArrayAccessVos objets acceptent la syntaxe $obj[$key] : lecture, écriture, isset et unset
IteratorVos objets se parcourent directement dans foreach, avec un contrôle total sur l’itération
IteratorAggregateVos objets se parcourent dans foreach en déléguant à un autre itérateur, souvent un Generator
StringableVos objets s’utilisent partout où une chaîne de caractères est attendue

Stringable fait bande à part : elle a été ajoutée en PHP 8 et vous avez rarement besoin de l’implémenter vous-même, car toute classe qui définit __toString() est automatiquement considérée comme l’implémentant. Elle existe surtout pour qu’une déclaration de type puisse dire « n’importe quoi d’affichable » sans énumérer toutes les classes qui se trouvent avoir une méthode __toString().

Des exemples complets des cinq, y compris ce qu’Iterator exige de vous et qu’IteratorAggregate ne demande pas, sont au chapitre 20.

Méthodes magiques

MéthodeAppelée quand
__constructUn objet est créé
__destructUn objet est sur le point d’être détruit
__getOn lit une propriété inaccessible ou non définie
__setOn écrit dans une propriété inaccessible ou non définie
__callOn appelle une méthode d’instance inaccessible ou non définie
__callStaticOn appelle une méthode statique inaccessible ou non définie
__toStringL’objet est utilisé dans un contexte de chaîne de caractères
__invokeL’objet est appelé comme s’il était une fonction
__cloneL’objet est dupliqué avec clone

« Magique » est le mot de PHP pour les méthodes que le langage appelle à votre place, par convention de nommage, plutôt que vous directement. Utiles pour construire des propriétés chargées à la demande ou des proxys fluides, elles glissent facilement vers un code que personne ne peut suivre en le lisant. Le chapitre 17 les traite en entier, compromis compris.