Quelles sont les manières de définir les constantes PHP ?
En PHP, il existe deux manières de définir () et const manière de définir des constantes.
Mais en développement, quand devons-nous utiliser finish() pour définir des constantes, et quand devons-nous utiliser const pour définir des constantes ? Quelle est la principale différence entre ces deux manières de définir des constantes ?
À partir de la version 5.3, PHP dispose de deux manières de définir des constantes, en utilisant le mot-clé const ou la méthode definition() :
const FOO = 'BAR'; define('FOO', 'BAR');
La plus grande différence entre les deux est que const est compilé Définir des constantes au moment de l'exécution, tandis que la méthode definition() définit des constantes au moment de l'exécution.
const ne peut pas être utilisé dans les instructions if, defne() peut être utilisé dans les instructions if. Un scénario courant pour
if(...) { const FOO = 'BAR';//错误 } if(...) { define('FOO', 'BAR');//正确 }
define() consiste à déterminer d'abord si la constante a été définie avant de définir la constante :
if(defined('FOO)) { define('FOO', 'BAR') }
const Lors de la définition d'une constante, la valeur ne peut être qu'un scalaire statique (Nombre, chaîne, vrai, faux, nul), et la méthode définir() peut utiliser la valeur de n'importe quelle expression comme valeur d'une constante. À partir de PHP 5.6, const permet également d'utiliser des expressions comme valeur de constantes.
const BIT_5 = 1 << 5; //PHP5.6后支持,之前的PHP版本不支持 define('BIT_5', 1 << 5);// 所有PHP版本都支持
const n'autorise que les noms de constantes simples, tandis que definition() peut utiliser la valeur de n'importe quelle expression comme nom de constante
for ($i = 0; $i < 32; $i++) { define('BIT_' . $i, 1 << $i); }
const Le nom de constante défini est sensible à la casse et à la casse. des constantes insensibles peuvent être définies en passant true au troisième paramètre de la méthode definition().
define('FOO', 'BAR', true); echo FOO; //BAR echo foo; //BAR
La liste ci-dessus présente quelques lacunes ou rigidité de const par rapport à définir(). Voyons pourquoi je recommande personnellement d'utiliser const au lieu de définir() pour définir des constantes (sauf si vous devez définir des constantes dans). les scénarios énumérés ci-dessus).
const a une meilleure lisibilité, const est une structure de langage plutôt qu'une fonction, et est cohérent avec la forme de définition des constantes de classe dans une classe.
const définit des constantes dans l'espace de noms actuel, et finish() doit transmettre le nom complet de l'espace de noms lors de la définition pour obtenir des effets similaires :
namespace A\B\C; //To define the constant A\B\C\FOO: const FOO = 'BAR'; define('A\B\C\FOO', 'BAR');
const est disponible à partir de la version PHP5.6. Utilisez les tableaux comme valeurs constantes, et definition() ne prend en charge l'utilisation de tableaux comme valeurs constantes qu'à partir de PHP 7.0.
const FOO = [1, 2, 3];// valid in PHP 5.6 define('FOO', [1, 2, 3]);// invalid in PHP 5.6, valid in PHP 7.0
Parce que const est une structure de langage et que les constantes sont définies au moment de la compilation, const sera légèrement plus rapide que definition().
Il est bien connu que PHP affectera l'efficacité après avoir défini un grand nombre de constantes avec définir(). Les gens ont inventé apc_load_constants() et hidef pour contourner les problèmes d'efficacité causés par definition().
Enfin, const peut également être utilisé pour définir des constantes dans les classes et les interfaces, et definition() ne peut être utilisé que pour définir des constantes dans l'espace de noms global :
class FOO { const BAR = 2;// 正确 } class Baz { define('QUX', 2)// 错误 }
Résumé :
À moins que vous souhaitiez définir une constante dans une branche if ou nommer une constante par la valeur d'une expression, dans les autres cas (même pour une simple lisibilité du code), il est recommandé d'utiliser const au lieu de définir ( ).
Recommandé : "Tutoriel PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!