-- 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
:
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 :
[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 :
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
:
Le nom défini par const
ne peut pas être une expression, alors que cela est possible avec define
:
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
:
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 :
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.
Enfin, const
peut être utilisé dans une classe ou une interface, ce qui n'est pas possible avec define
:
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 !
Congratulations @fredbouchery! You received a personal award!
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!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit