PHP常量

·PHP 中的常量是指一旦定义后将不能被改变的标识符。

·常量可以用const和define()来定义。

PHP常量的特性

  • 不变性: 常量一旦定义,其值不能改变。
  • 全局作用域: 常量在定义后,可以在整个脚本的任何地方使用,无需使用 global 关键字。
  • 数据类型: 常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组(PHP 7 及以上版本)。
  • 区分大小写: 常量名称默认是区分大小写的。如果需要定义大小写不敏感的常量,可以在 define() 函数的第三个参数设置为 true。

· 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。

php 复制代码
<?php

// 区分大小写的常量名
define("GOOD", "欢迎来到我的世界");
echo GOOD;    // 输出 "欢迎来到我的世界"

echo '<br>';
echo good;       // 区分大小写,会报红
?>

· 但是只需要在后方加上true,就不会区分大小写, PHP 7.3.0 开始,定义不区分大小写的常量已被弃用。

php 复制代码
<?php
// 区分大小写的常量名
define("GOOD", "欢迎来到我的世界",true);

echo good;    // 输出 "欢迎来到我的世界"
echo '<br>';
?>

· 不能使用$符号,否则会获取不到常量

php 复制代码
<?php
$GOOD = "变量";
define("GOOD", "欢迎来到我的世界",);

echo $GOOD;         //输出:变量     直接使用常量不能加$符号,加了$符号就等于变成了变量了
echo '<br>';
?>

· 常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。

php 复制代码
<?php

define("GOOD", "欢迎来到我的世界");

function Test() {
    echo GOOD;
}

Test();    // 输出: 欢迎来到我的世界
?>

结果图:

使用 const 关键字

php 复制代码
<?php
const table = "我来自宇宙";
echo table;                 //输出: 我来自宇宙
?>

常量也可以是数组,需要时也是能直接获取的

php 复制代码
<?php

define("message",[
    "我是超人",
    "我是李白",
    "我是无极"
]);

echo message[2]; // 输出 "我是无极"
?>
php 复制代码
<?php

const message = [

    "我是超人",
    "我是李白",
    "我是无极"

];

echo message[1];        // 输出 "我是李白"
?>

在PHP中,define() 和 const 都用于声明常量,但在使用和定义方式上有一些区别:

一、定义方式:

define(): 这是一个动态函数,允许你在运行时给常量赋值。例如:define('MY_CONSTANT', 'Hello');

const: 是静态声明的,一旦在文件中声明,就不能改变其值。例如:const MY_CONST = 'Hello';

  • 可变性:

define() 的常量可以改变(虽然这不是推荐的做法),但如果是预定义的 const 则不允许修改。

const 的安全性更高,因为它们在编译时就确定了值。

三、使用场景:

define() 更适合那些在程序运行过程中可能需要改变的值,如配置信息。

const 更适合那些在整个脚本生命周期内不变的重要常量,比如数学常数 PI 或 Pi 数字表示。

四、错误处理:

如果尝试修改已定义为 const 的值,会引发错误。

define() 如果尝试赋予不存在的变量名,会在运行时给出提示。

相关推荐
千里马学框架11 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台12 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone12 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc13 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo14 小时前
Kotlin 协程中的 Job 结构化并发与取消
android
sun00770015 小时前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼15 小时前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone16 小时前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen16 小时前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone16 小时前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui