Rumah pembangunan bahagian belakang tutorial php 详解PHP中const和define的区别

详解PHP中const和define的区别

Dec 18, 2019 pm 04:13 PM
const define

详解PHP中const和define的区别

在PHP中定义常量时,可用const与define这两种方式,那他们到底有什么区别呢?  

1. const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。  

2. define不能定义在类中,而const必须定义在类中,并且const定义的变量必须通过类名::变量名来进行访问。  

3. const不能在条件语句中定义常量。  

4. const采用一个普通的常量名称(静态的标量),define可以采用任何表达式作为名称。  

5. const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量。  

6.使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。

如果在类中定义常量,不能用define,而用const,如下例:

推荐:《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()获取所有定义的常量
?>
Salin selepas log masuk

一般是define在类外定义常量,const在类内定义常量,并且const必须通过类名::变量名来进行访问。但是php5.3以上支持类外通过const定义常量,看如下,这样是ok的:

<?php
   const a = "abcdef";
   echo a;
?>
Salin selepas log masuk

关于常量的基础知识,这里不说了,除了以上,define和const的其它区别(摘自网络):

1.const不能再条件语句中定义常量,但是define是可以的,如下:

<?php
if(1){
   const a = &#39;java&#39;;
 }    
echo a;  //必错
?>
Salin selepas log masuk

2.const采用一个普通的常量名称,define可以采用表达式作为名称

<?phpconst  FOO = &#39;PHP&#39;; 
for ($i = 0; $i < 32; ++$i) { 
    define(&#39;PHP_&#39; . $i, 1 << $i); 
} 
?>
Salin selepas log masuk

3.const只能接受静态的标量,而define可以采用任何表达式。

<?php
const PHP = 1 << 5; // 错误
define(&#39;PHP&#39;, 1 << 5); // 正确 
?>
Salin selepas log masuk

4.const本身就是一个语言结构。而define是一个函数。所以使用const速度要快的多。

两者共同点:两者都是不能进行重新赋值。

下面内容摘自Rotted_Pencil的博文:PHP中定义常量的区别,define() vs. const

前言

今天在Stackoverflow又看到一个很有趣的文章,所以翻译过后摘了过来。文章是由PHP开发成员之一的NikiC写的,权威性自然毋庸置疑

正文

在PHP5.3中,有两种方法可以定义常量:

1.使用const关键字

2.使用define()方法

const FOO = ‘BAR’; 
define(‘FOO’,’BAR’);
Salin selepas log masuk

这两种方式的根本区别在于const会在代码编译时定义一个常量,而define则是在代码运行时才定义一个常量。这就使得const会有以下几个缺点:

const不能在条件语句中使用。如果要定义一个全局变量,const必须要处于整个代码的最外层:

if (...) {    
    const FOO = &#39;BAR&#39;;    // 无效的
}
// but
if (...) {
   define(&#39;FOO&#39;, &#39;BAR&#39;); // 有效的
}
Salin selepas log masuk

你可以能会问为什么我要这么做?一个最平常的例子是当你在检测一个常量是否已经被定义时:

if (!defined(&#39;FOO&#39;)) {
    define(&#39;FOO&#39;, &#39;BAR&#39;);
}
Salin selepas log masuk

const只能用来声明变量(如数字、字符串,或者true, false, null, FILE),而define()还能接受表达式。不过在PHP5.6之后const也可以接受常量的表达式了:

const BIT_5 = 1 << 5;    // 在PHP5.6之后有效,之前无效
define(&#39;BIT_5&#39;, 1 << 5); // 一直有效
Salin selepas log masuk

const的常量命名只能用直白的文本,而define()允许你用任何表达式来对常量命名。这样我们就可以执行以下操作:

for ($i = 0; $i < 32; ++$i) {
    define(&#39;BIT_&#39; . $i, 1 << $i);
}
Salin selepas log masuk

const定义的常量是大小写敏感的,但是define允许你将其第三个参数设置为true来关闭其对大小写的敏感:

define(&#39;FOO&#39;, &#39;BAR&#39;, true);
echo FOO; // BAR
echo foo; // BAR
Salin selepas log masuk

以上就是你需要注意的几点。那么现在我来说明以下,为什么不涉及以上情况下,我个人总是习惯使用const:

const更加易读、美观。

const默认在当前的namespace下定义常量,而使用define则需要你写明整个namespace的完整路径:

namespace A\B\C; 
// 如果要定义常量 A\B\C\FOO: 
const FOO = ‘BAR’; 
define(‘A\B\C\FOO’, ‘BAR’);
Salin selepas log masuk

自从PHP5.6后,使用const数组也能被定义为常量。而define目前是不支持这一功能的,但是该功能会在PHP7中被实现:

const FOO = [1, 2, 3];    // 在PHP 5.6中有效 
define(‘FOO’, [1, 2, 3]); // 在PHP 5.6无效, 在PHP 7.0有效
Salin selepas log masuk

因为const在编译时就被执行了,所以它在速度上要比define快一点。

尤其是在使用define定义大量常量时,PHP的运行速度会变得非常慢。人们甚至发明了诸如apc_load_constantshide来避免这个问题

与define相比,const能使定义常量的效率提高一倍(在配置有XDebug的开发机器上,这个差异还会更大)。但是在查询时间上,两者是没有区别的(因为二者用的都是同一个查询表)

最后需要注意的一点是,const可以在class和interface当中使用 ,而define是做不到这一点的:

class Foo {
    const BAR = 2; // 有效
}
class Baz {
    define(&#39;QUX&#39;, 2); // 无效
}
Salin selepas log masuk

总结  

除非你需要使用表达式或者在条件语句中定义常量,不然的话仅仅是为了代码的简单可读性你都最好要使用const!

更多PHP相关知识,请访问PHP中文网

Atas ialah kandungan terperinci 详解PHP中const和define的区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

defineHow untuk menentukan makro berbilang baris defineHow untuk menentukan makro berbilang baris Oct 11, 2023 pm 01:24 PM

define mentakrifkan makro berbilang baris dengan menggunakan `\` untuk membahagikan `do { \ printf("%d\n", x } manakala (0)` kepada berbilang baris untuk definisi. Dalam takrifan makro, sengkang ke belakang `\` mestilah aksara terakhir takrifan makro dan tidak boleh diikuti dengan ruang atau ulasan. Apabila menggunakan `\` untuk kesinambungan baris, berhati-hati untuk memastikan kod boleh dibaca dan pastikan terdapat `\` di hujung setiap baris.

Terokai kepentingan dan peranan define function dalam PHP Terokai kepentingan dan peranan define function dalam PHP Mar 19, 2024 pm 12:12 PM

Kepentingan dan peranan fungsi define dalam PHP 1. Pengenalan asas kepada fungsi define Dalam PHP, fungsi define ialah fungsi utama yang digunakan untuk menentukan pemalar tidak akan mengubah nilainya semasa menjalankan program. Pemalar yang ditakrifkan menggunakan fungsi define boleh diakses di seluruh skrip dan bersifat global. 2. Sintaks fungsi define Sintaks asas fungsi define adalah seperti berikut: define("constant name","constant value&qu

Pemahaman mendalam tentang const dalam bahasa C Pemahaman mendalam tentang const dalam bahasa C Feb 18, 2024 pm 12:56 PM

Penerangan terperinci dan contoh kod const dalam C Dalam bahasa C, kata kunci const digunakan untuk menentukan pemalar, yang bermaksud bahawa nilai pembolehubah tidak boleh diubah suai semasa pelaksanaan program. Kata kunci const boleh digunakan untuk mengubah suai pembolehubah, parameter fungsi dan nilai pulangan fungsi. Artikel ini akan memberikan analisis terperinci tentang penggunaan kata kunci const dalam bahasa C dan memberikan contoh kod khusus. pembolehubah diubah suai const Apabila const digunakan untuk mengubah suai pembolehubah, ini bermakna pembolehubah itu ialah pembolehubah baca sahaja dan tidak boleh diubah suai setelah ia diberikan nilai. Contohnya: berterusan

defineHow untuk menentukan kompilasi bersyarat defineHow untuk menentukan kompilasi bersyarat Oct 11, 2023 pm 01:20 PM

defineKompilasi bersyarat boleh dicapai menggunakan arahan prapemprosesan `#ifdef`, `#ifndef`, `#if`, `#elif`, `#else` dan `#endif`.

Mari kita bincangkan tentang perbezaan antara var, let dan const (contoh kod) Mari kita bincangkan tentang perbezaan antara var, let dan const (contoh kod) Jan 06, 2023 pm 04:25 PM

Artikel ini membawakan anda pengetahuan yang berkaitan tentang JavaScript Ia terutamanya memperkenalkan kepada anda perbezaan antara var, let dan const, serta hubungan antara ECMAScript dan JavaScript. Rakan yang berminat boleh melihatnya.

Cara menggunakan const dalam bahasa c Cara menggunakan const dalam bahasa c Sep 20, 2023 pm 01:34 PM

const ialah kata kunci yang boleh digunakan untuk mengisytiharkan pemalar, pengubah const dalam parameter fungsi, nilai pulangan fungsi yang diubah suai const dan penunjuk yang diubah suai const. Pengenalan terperinci: 1. Isytiharkan pemalar Kata kunci const boleh digunakan untuk mengisytiharkan pemalar Nilai pemalar tidak boleh diubah suai semasa menjalankan atur cara, seperti integer, nombor titik terapung. aksara, dsb., atau jenis data tersuai; 2. Pengubah suai const dalam parameter fungsi Kata kunci const boleh digunakan dalam parameter fungsi, menunjukkan bahawa parameter tidak boleh diubah suai di dalam fungsi, dsb.

18 Cara untuk Memperbaiki Isu Perkhidmatan Audio Tidak Menjawab pada Windows 11 18 Cara untuk Memperbaiki Isu Perkhidmatan Audio Tidak Menjawab pada Windows 11 Jun 05, 2023 pm 10:23 PM

Output dan input audio memerlukan pemacu dan perkhidmatan tertentu untuk berfungsi seperti yang diharapkan pada Windows 11. Ini kadangkala berakhir dengan ralat di latar belakang, menyebabkan masalah audio seperti tiada output audio, peranti audio hilang, audio herot, dsb. Cara Membetulkan Perkhidmatan Audio Tidak Menjawab pada Windows 11 Kami mengesyorkan anda untuk memulakan dengan pembetulan yang dinyatakan di bawah dan menyelesaikan senarai sehingga anda berjaya menyelesaikan isu anda. Perkhidmatan audio mungkin menjadi tidak responsif atas beberapa sebab pada Windows 11. Senarai ini akan membantu anda mengesahkan dan menyelesaikan kebanyakan isu yang menghalang perkhidmatan audio daripada bertindak balas pada Windows 11. Sila ikut bahagian yang berkaitan di bawah untuk membantu anda melalui proses tersebut. Kaedah 1: Mulakan semula perkhidmatan audio yang mungkin anda hadapi

Ralat sintaks C++: objek const mesti dimulakan apabila ditakrifkan Bagaimana untuk menanganinya? Ralat sintaks C++: objek const mesti dimulakan apabila ditakrifkan Bagaimana untuk menanganinya? Aug 22, 2023 am 09:13 AM

Untuk pengaturcara C++, ralat sintaks adalah salah satu masalah yang paling biasa. Salah satu kesilapan biasa ialah objek const mesti dimulakan pada masa definisi. Jika anda menghadapi situasi ini, bagaimanakah anda harus menghadapinya? Pertama, kita perlu memahami apa itu objek const. Kata kunci const ialah kelayakan jenis khas dalam C++ yang menyatakan bahawa nilai pembolehubah tidak boleh diubah semasa pelaksanaan program. Pembolehubah sedemikian dipanggil "pemalar". Jika anda mentakrifkan objek const tanpa memulakannya, anda akan menghadapi ralat di atas. ini adalah

See all articles