Promesse de rétrocompatibilité

Parce que mettre à jour un projet ne devrait pas être compliqué ni casser vos applications, il est important de garantir la compatibilité entre les versions mineures de nos projets.

C’est pourquoi nous suivons strictement le versionnage sémantique pour toutes nos bibliothèques et applications.

Les règles qui suivent viennent de la promesse de rétrocompatibilité de Symfony, que nous reprenons entièrement à notre compte.

Employer nos interfaces

Cas d’usage Rétrocompatibilité
Si vous… Alors nous garantissons la rétrocompatibilité…
Typez contre l’interface Oui
Appelez une méthode Oui
Si vous implémentez l’interface et… Alors nous garantissons la rétrocompatibilité…
Implémentez une méthode Oui
Ajoutez un argument à une méthode implémentée Oui
Ajoutez une valeur par défaut à un argument Oui
Ajoutez un type de retour à une méthode implémentée Oui

Employer nos classes

Cas d’usage Rétrocompatibilité
Si vous… Alors nous garantissons la rétrocompatibilité…
Typez contre la classe Oui
Créez une nouvelle instance Oui
Étendez la classe Oui
Accédez à une propriété publique Oui
Appelez une méthode publique Oui
Si vous étendez la classe et… Alors nous garantissons la rétrocompatibilité…
Accédez à une propriété protégée Oui
Appelez une méthode protégée Oui
Surchargez une propriété publique Oui
Surchargez une propriété protégée Oui
Surchargez une méthode publique Oui
Surchargez une méthode protégée Oui
Ajoutez une nouvelle propriété Non
Ajoutez une nouvelle méthode Non
Ajoutez un argument à une méthode surchargée Oui
Ajoutez une valeur par défaut à un argument Oui
Appelez une méthode privée (par réflexion) Non
Accédez à une propriété privée (par réflexion) Non

Employer nos traits

Cas d’usage Rétrocompatibilité
Si vous… Alors nous garantissons la rétrocompatibilité…
Employez un trait Oui
Si vous employez le trait et… Alors nous garantissons la rétrocompatibilité…
Vous en servez pour implémenter une interface Oui
Vous en servez pour implémenter une méthode abstraite Oui
Vous en servez pour étendre une classe parente Oui
Vous en servez pour définir une classe abstraite Oui
Employez une propriété publique, protégée ou privée Oui
Employez une méthode publique, protégée ou privée Oui

Exceptions à ces règles

Ces règles ne valent pas dans les cas suivants :

  • une balise @internal est posée,
  • le fichier est dans un dossier de tests ou un espace de noms de tests.

Ces méthodes, classes, traits ou interfaces ne doivent être ni employés ni implémentés.