Explication détaillée de la différence entre const et definition en PHP

angryTom
Libérer: 2023-04-08 06:22:01
avant
5915 Les gens l'ont consulté

Explication détaillée de la différence entre const et definition en PHP

Disponible lors de la définition de constantes en PHP Qu'est-ce que la différence entre const et définir ?

1. const est utilisé pour définir les variables membres de la classe. Une fois définie, sa valeur ne peut pas être modifiée. définir définit des constantes globales accessibles n'importe où.

2. Définir ne peut pas être défini dans une classe, mais const doit être défini dans une classe et les variables définies par const doivent être accessibles via le nom de la classe :: nom de la variable.

3. Les constantes const ne peuvent pas être définies dans les instructions conditionnelles.

4. const utilise un nom de constante ordinaire (scalaire statique) et définir peut utiliser n'importe quelle expression comme nom.

5. const est toujours sensible à la casse, cependant finish() peut définir des constantes insensibles à la casse via le troisième paramètre.

6. L'utilisation de const est simple et facile à lire. Il s'agit d'une structure de langage en soi, et définir est une méthode. Utiliser const pour définir est beaucoup plus rapide que définir au moment de la compilation.

Si vous définissez des constantes dans une classe, vous ne pouvez pas utiliser Définir, mais utilisez const, comme dans l'exemple suivant :

Recommandé : "Tutoriel PHP"

<?php
//在类外面通常这样定义常量
define("PHP","111cn.net");
class MyClass
{
    //常量的值将始终保持不变。在定义和使用常量的时候不需要使用$符号
    const constant = &#39;constant value&#39;;

    function showConstant() {
        echo  self::constant . "<br>";
    }
}

echo MyClass::constant . "<br>";

$classname = "MyClass";
echo $classname::constant . "<br>"; // PHP 5.3.0之后

$class = new MyClass();
$class->showConstant();
echo $class::constant."<br>"; // PHP 5.3.0之后
//print_r(get_defined_constants());  //可以用get_defined_constants()获取所有定义的常量
?>
Copier après la connexion

Généralement finish définit les constantes en dehors de la classe, const définit les constantes dans la classe et const doit être accessible via le nom de la classe :: nom de la variable. Cependant, php5.3 et supérieur prennent en charge la définition de constantes en dehors des classes via const. Voir ce qui suit. C'est OK :

<?php
   const a = "abcdef";
   echo a;
?>
Copier après la connexion

Concernant la connaissance de base des constantes, je n'entrerai pas dans les détails ici. En plus de ce qui précède, définir et const sont d'autres choses. Différences (tirées d'Internet) :

1.const ne peut pas définir de constantes dans les instructions conditionnelles, mais définir est possible, comme suit :

<?php
if(1){
   const a = &#39;java&#39;;
 }    
echo a;  //必错
?>
Copier après la connexion

2.const utilise un nom de constante ordinaire, définir peut prendre une expression comme nom

<?phpconst  FOO = &#39;PHP&#39;; 
for ($i = 0; $i < 32; ++$i) { 
    define(&#39;PHP_&#39; . $i, 1 << $i); 
} 
?>
Copier après la connexion

3.const ne peut accepter que des scalaires statiques, tandis que définir peut prendre n'importe quelle expression.

<?php
const PHP = 1 << 5; // 错误
define(&#39;PHP&#39;, 1 << 5); // 正确 
?>
Copier après la connexion

4.const lui-même est une structure de langage. Et définir est une fonction. Utiliser const est donc beaucoup plus rapide.

Les deux ont quelque chose en commun : les deux ne peuvent pas être réaffectés.

Le contenu suivant est extrait du billet de blog de Rotted_Pencil : La différence entre définir des constantes en PHP, definition() et const

Avant-propos

Lire encore une fois sur Stackoverflow aujourd'hui, je suis tombé sur un article très intéressant, alors je l'ai traduit et repris. L'article a été rédigé par NikiC, l'un des membres du développement PHP, et son autorité est sans aucun doute

Texte

En PHP5.3, il existe deux manières de définir des constantes :

1. Utilisez le mot-clé const

2. Utilisez la méthode définir()

const FOO = ‘BAR’; 
define(‘FOO’,’BAR’);
Copier après la connexion

La différence fondamentale entre les deux méthodes est que const définira une constante lorsque le code est compilé, tandis que définir will Une constante est définie uniquement lorsque le code est en cours d'exécution. Cela entraîne les inconvénients suivants de const :

const ne peut pas être utilisé dans les instructions conditionnelles. Si vous souhaitez définir une variable globale, const doit être au niveau le plus externe de tout le code :

if (...) {    
    const FOO = &#39;BAR&#39;;    // 无效的
}
// but
if (...) {
   define(&#39;FOO&#39;, &#39;BAR&#39;); // 有效的
}
Copier après la connexion

Vous pouvez demander pourquoi je veux faire cela ? L'un des exemples les plus courants est lorsque vous vérifiez si une constante a été définie :

if (!defined(&#39;FOO&#39;)) {
    define(&#39;FOO&#39;, &#39;BAR&#39;);
}
Copier après la connexion

const ne peut être utilisé que pour déclarer des variables (telles que des nombres, des chaînes ou vrai, faux, nul, FILE), et definition() peut également accepter des expressions. Cependant, après PHP5.6, const peut également accepter des expressions constantes : la dénomination constante de

const BIT_5 = 1 << 5;    // 在PHP5.6之后有效,之前无效
define(&#39;BIT_5&#39;, 1 << 5); // 一直有效
Copier après la connexion

const ne peut utiliser que du texte simple, tandis que définir() vous permet d'utiliser n'importe quelle expression pour la nommer. Cela nous permet de faire ce qui suit :

for ($i = 0; $i < 32; ++$i) {
    define(&#39;BIT_&#39; . $i, 1 << $i);
}
Copier après la connexion

les constantes définies par const sont sensibles à la casse, mais définir vous permet de désactiver la sensibilité à la casse en définissant son troisième paramètre sur true :

define(&#39;FOO&#39;, &#39;BAR&#39;, true);
echo FOO; // BAR
echo foo; // BAR
Copier après la connexion

Le ci-dessus sont les points auxquels vous devez prêter attention. Alors maintenant, je vais expliquer ce qui suit, pourquoi j'utilise personnellement toujours const lorsque les situations ci-dessus ne sont pas impliquées :

const est plus lisible et plus beau.

const définit les constantes dans l'espace de noms actuel par défaut, et l'utilisation de définir vous oblige à écrire le chemin complet de l'espace de noms entier :

namespace A\B\C; 
// 如果要定义常量 A\B\C\FOO: 
const FOO = ‘BAR’; 
define(‘A\B\C\FOO’, ‘BAR’);
Copier après la connexion

Depuis PHP5.6, les tableaux const peuvent également être définis. une constante. Define ne prend actuellement pas en charge cette fonction, mais cette fonction sera implémentée dans PHP7 :

const FOO = [1, 2, 3];    // 在PHP 5.6中有效 
define(‘FOO’, [1, 2, 3]); // 在PHP 5.6无效, 在PHP 7.0有效
Copier après la connexion

Parce que const est exécuté lors de la compilation, il est plus rapide que Define.

Particulièrement lors de l'utilisation de definition pour définir un grand nombre de constantes, PHP fonctionnera très lentement. Les gens ont même inventé des choses comme apc_load_constantshide pour éviter ce problème

Par rapport à set, const peut doubler l'efficacité de la définition des constantes (sur une machine de développement configurée avec XDebug, cette différence sera encore plus grande). Mais en termes de temps de requête, il n'y a pas de différence entre les deux (car les deux utilisent la même table de requête)

La dernière chose à noter est que const peut être utilisé en classe et en interface, tandis que Define est Ceux qui je ne peux pas faire ça :

class Foo {
    const BAR = 2; // 有效
}
class Baz {
    define(&#39;QUX&#39;, 2); // 无效
}
Copier après la connexion

Résumé

À moins que vous ayez besoin d'utiliser des expressions ou de définir des constantes dans des instructions conditionnelles, vous feriez mieux d'utiliser const uniquement pour la simple lisibilité du code !

Pour plus de connaissances sur PHP, veuillez visiter le Site Web PHP chinois !

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!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal