Detaillierte Erklärung des Unterschieds zwischen const und define in PHP

angryTom
Freigeben: 2023-04-08 06:22:01
nach vorne
5877 Leute haben es durchsucht

Detaillierte Erklärung des Unterschieds zwischen const und define in PHP

Verfügbar beim Definieren von Konstanten in PHP Was ist der Unterschied zwischen const und define?

1. const wird zum Definieren von Klassenmitgliedsvariablen verwendet. Sobald sie definiert sind, kann ihr Wert nicht geändert werden. define definiert globale Konstanten, auf die überall zugegriffen werden kann.

2. define kann nicht in einer Klasse definiert werden, aber const muss in einer Klasse definiert werden, und auf die durch const definierten Variablen muss über Klassenname::Variablenname zugegriffen werden.

3. Konstanten können nicht in bedingten Anweisungen definiert werden.

4. const verwendet einen gewöhnlichen Konstantennamen (statischer Skalar) und define kann einen beliebigen Ausdruck als Namen verwenden.

5. const unterscheidet immer zwischen Groß- und Kleinschreibung, jedoch kann define() über den dritten Parameter Konstanten definieren, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird.

6. Die Verwendung von const ist einfach und leicht zu lesen, und die Verwendung von const zum Definieren ist viel schneller als das Definieren zur Kompilierzeit.

Wenn Sie Konstanten in einer Klasse definieren, können Sie nicht define, sondern const verwenden, wie im folgenden Beispiel:

Empfohlen: „PHP-Tutorial

<?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()获取所有定义的常量
?>
Nach dem Login kopieren

Im Allgemeinen definiert define Konstanten außerhalb der Klasse, const definiert Konstanten innerhalb der Klasse und auf const muss über Klassenname::Variablenname zugegriffen werden. PHP5.3 und höher unterstützen jedoch die Definition von Konstanten außerhalb von Klassen durch const. Siehe Folgendes:

<?php
   const a = "abcdef";
   echo a;
?>
Nach dem Login kopieren

Was die Grundkenntnisse von Konstanten betrifft, werde ich hier nicht näher darauf eingehen. Darüber hinaus sind define und const weitere Unterschiede (aus dem Internet):

1.const kann keine Konstanten in bedingten Anweisungen definieren, aber define ist wie folgt möglich:

<?php
if(1){
   const a = &#39;java&#39;;
 }    
echo a;  //必错
?>
Nach dem Login kopieren

2.const verwendet einen gewöhnlichen Konstantennamen, define kann einen Ausdruck als Namen annehmen

<?phpconst  FOO = &#39;PHP&#39;; 
for ($i = 0; $i < 32; ++$i) { 
    define(&#39;PHP_&#39; . $i, 1 << $i); 
} 
?>
Nach dem Login kopieren

3.const kann nur statische Skalare akzeptieren, während define jeden Ausdruck annehmen kann.

<?php
const PHP = 1 << 5; // 错误
define(&#39;PHP&#39;, 1 << 5); // 正确 
?>
Nach dem Login kopieren

4.const selbst ist eine Sprachstruktur. Und define ist eine Funktion. Die Verwendung von const ist also viel schneller.

Die beiden haben etwas gemeinsam: Beide können nicht neu zugeordnet werden.

Der folgende Inhalt ist ein Auszug aus dem Blogbeitrag von Rotted_Pencil: Der Unterschied zwischen der Definition von Konstanten in PHP, define() vs. const

Vorwort

Lesen Ich habe es heute noch einmal auf Stackoverflow gelesen und bin auf einen sehr interessanten Artikel gestoßen, also habe ich ihn übersetzt und zur Hand genommen. Der Artikel wurde von NikiC, einem der PHP-Entwicklungsmitglieder, geschrieben und seine Autorität ist zweifellos

Text

In PHP5.3 gibt es zwei Möglichkeiten, Konstanten zu definieren:

1. Verwenden Sie das Schlüsselwort const

2. Verwenden Sie die Methode define()

const FOO = ‘BAR’; 
define(‘FOO’,’BAR’);
Nach dem Login kopieren

Der grundlegende Unterschied zwischen den beiden Methoden besteht darin, dass const beim Kompilieren des Codes eine Konstante definiert, während define will Eine Konstante wird definiert, wenn der Code ausgeführt wird. Dies führt dazu, dass const die folgenden Nachteile hat:

const kann nicht in bedingten Anweisungen verwendet werden. Wenn Sie eine globale Variable definieren möchten, muss sich const auf der äußersten Ebene des gesamten Codes befinden:

if (...) {    
    const FOO = &#39;BAR&#39;;    // 无效的
}
// but
if (...) {
   define(&#39;FOO&#39;, &#39;BAR&#39;); // 有效的
}
Nach dem Login kopieren

Sie fragen sich vielleicht, warum ich das tun möchte? Eines der häufigsten Beispiele ist die Überprüfung, ob eine Konstante definiert wurde:

if (!defined(&#39;FOO&#39;)) {
    define(&#39;FOO&#39;, &#39;BAR&#39;);
}
Nach dem Login kopieren

const kann nur zum Deklarieren von Variablen (z. B. Zahlen, Zeichenfolgen oder wahr, falsch, null, DATEI) verwendet werden. und define() kann auch Ausdrücke akzeptieren. Ab PHP5.6 kann const jedoch auch konstante Ausdrücke akzeptieren:

const BIT_5 = 1 << 5;    // 在PHP5.6之后有效,之前无效
define(&#39;BIT_5&#39;, 1 << 5); // 一直有效
Nach dem Login kopieren

consts Konstantenbenennung kann nur einfachen Text verwenden, während define() Ihnen die Verwendung eines beliebigen Ausdrucks zur Konstantenbenennung ermöglicht. Dadurch können wir Folgendes tun:

for ($i = 0; $i < 32; ++$i) {
    define(&#39;BIT_&#39; . $i, 1 << $i);
}
Nach dem Login kopieren

const-definierte Konstanten unterscheiden zwischen Groß- und Kleinschreibung, aber define ermöglicht es Ihnen, die Groß-/Kleinschreibung zu deaktivieren, indem Sie den dritten Parameter auf true setzen:

define(&#39;FOO&#39;, &#39;BAR&#39;, true);
echo FOO; // BAR
echo foo; // BAR
Nach dem Login kopieren

The Oben sind die Punkte aufgeführt, auf die Sie achten müssen. Deshalb erkläre ich nun Folgendes, warum ich persönlich immer const verwende, wenn die oben genannten Situationen nicht betroffen sind:

const ist lesbarer und schöner.

const definiert standardmäßig Konstanten im aktuellen Namespace, und die Verwendung von define erfordert, dass Sie den vollständigen Pfad des gesamten Namespace schreiben:

namespace A\B\C; 
// 如果要定义常量 A\B\C\FOO: 
const FOO = ‘BAR’; 
define(‘A\B\C\FOO’, ‘BAR’);
Nach dem Login kopieren

Seit PHP5.6 können auch const-Arrays definiert werden eine Konstante. Define unterstützt diese Funktion derzeit nicht, aber diese Funktion wird in PHP7 implementiert:

const FOO = [1, 2, 3];    // 在PHP 5.6中有效 
define(‘FOO’, [1, 2, 3]); // 在PHP 5.6无效, 在PHP 7.0有效
Nach dem Login kopieren

Da const während der Kompilierung ausgeführt wird, ist es schneller als define.

Besonders wenn Sie define zum Definieren einer großen Anzahl von Konstanten verwenden, läuft PHP sehr langsam. Man hat sogar Dinge wie apc_load_constantshide erfunden, um dieses Problem zu vermeiden

Im Vergleich zu define kann const die Effizienz der Definition von Konstanten verdoppeln (auf einem mit XDebug konfigurierten Entwicklungscomputer ist dieser Unterschied sogar noch größer). In Bezug auf die Abfragezeit gibt es jedoch keinen Unterschied zwischen den beiden (da beide dieselbe Abfragetabelle verwenden).

Das Letzte, was zu beachten ist, ist, dass const in Klassen und Schnittstellen verwendet werden kann, während define dies ist Wer Das geht nicht:

class Foo {
    const BAR = 2; // 有效
}
class Baz {
    define(&#39;QUX&#39;, 2); // 无效
}
Nach dem Login kopieren

Zusammenfassung

Es sei denn, Sie müssen Ausdrücke verwenden oder Konstanten in bedingten Anweisungen definieren, verwenden Sie const besser nur aus Gründen der einfachen Lesbarkeit des Codes!

Weitere PHP-bezogene Kenntnisse finden Sie auf der PHP-Chinese-Website!

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Unterschieds zwischen const und define in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!