Quelle est la différence entre const et define

in php •  6 years ago  (edited)

-- traduction de l'intervention de Nikita Popov sur stackoverflow --

Depuis PHP 5.3, il y a 2 façons de définir une constante : Avec le mot clef const ou avec la fonction define :
code 1

La différence fondamentale entre ces 2 façons de faire, c'est que la définition par const est faite à la compilation alors que define crée la constante au moment de son exécution. C'est cette différence qui est à la source de la plupart des inconvénients de const.

Par exemple, il n'est pas possible d'utiliser const dans une condition, vous devez la déclarer dans le contexte global :
code 2

[NDT] Cela génère une erreur de syntaxe : unexpected 'const'

Pourquoi vouloir faire des define dans une condition ? Un usage courant de cela, c'est de pouvoir définir la constante si elle ne l'est pas encore :
code 3

const n'accepte que des scalaires (nombres, chaînes ou d'autres constantes comme true, false, null, __FILE__) alors que define accepte n'importe quelles expressions. Depuis PHP 5.6, les expressions constantes sont autorisées avec const :
code 4
Le nom défini par const ne peut pas être une expression, alors que cela est possible avec define :
code 5

const est toujours sensible à la casse, alors que define permet de définir une constante non sensible à la casse en passant le troisième paramètre à true :
ccode 6

Voilà, c'était le mauvais coté des choses. Maintenant, regardons les raisons pour lesquelles j'utilise toujours personnellement const en dehors des situations évoquées aux dessus.

const est plus agréable à lire. C'est une construction du langage et non une fonction, et c'est plus cohérent avec la création de constantes dans les classes.

const étant une construction du langage, il peut faire l'objet d'analyse statique par des outils automatisés.

const défini une constante dans le namespace courant alors que define doit définir le namespace complet :
code 6
Depuis PHP 5.6, const peut aussi contenir des tableaux alors que ce n'est pas le cas de define. Depuis PHP 7, on peut utiliser des tableaux avec les 2.
code 7
Enfin, const peut être utilisé dans une classe ou une interface, ce qui n'est pas possible avec define :
code 8
Pour résumer, tant que vous n'avez pas besoin de définir une constante dans une condition ou à partir d'une expression dynamique, utilisez const à la place de define, c'est beaucoup plus lisible !

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @fredbouchery! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!