php

最新PHP中的const和define 定义常量的区别

dafenqi
2023-08-11 / 0 评论 / 8 阅读 / 正在检测是否收录...

最新PHP中的const和define 定义常量的区别

常量是一个简单的标识符。在脚本执行期间该值不能改变(除了所谓的魔术常量,他们其实不是常量)。常量大小写敏感(php 7.4*)。通常常量标识符总是大写的。

  1. const 通常用于类成员变量的定义。define不可用于类成员变量的定义,可用于全局常量。
  2. const是在编译时定义, 不能在函数,循环及if条件中使用; 函数define() 定义的常量是在执行define()函数时定义的,因此可以在函数内、循环内、if语句内等函数能够被调用的任何地方使用define()函数定义常量。
    <?php
    const FOO='BAR';//有效的valid
    define('FOO', 'BAR');// 有效的valid
    if (1) {
    const FOO='BAR';//无效的invalid
    }
    if (1) {
    define('FOO', 'BAR');// 有效的valid
    }

3 .const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感(php7.4被弃用)。
例如:
<?php
define('FOO', 'BAR', true); //不区分大小写的常量的声明已从php7.4被弃用。现在将其TRUE作为第三个参数传递 给define()会生成弃用警告。不建议使用不区分大小写的常量
const BAR =123;
echo BAR;
echo FOO;// BAR
echo foo; // BAR

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

for ($i = 0; $i < 32; ++$i) {
define('BIT_'. $i, 1<< $i);
}

  1. 类常量可见性从 php7.4开始支持.

class ConstDemo
{
const PUBLIC_CONST_A=1;
public const PUBLIC_CONST_B=2;
protected const PROTECTED_CONST=3;
private const PRIVATE_CONST=4;
}

  1. 需要注意的一点是,const可以在class和interface当中使用定义类常量 ,而define是做不到这一点的,但define可以在类方法中使用:
    class Foo {
    const BAR=2; // 有效
    }
    class Baz {
    define('QUX', 2); // 无效
    public function foo(
    define('QUX', 2); // 有效
    )
    }
  1. const默认在当前的namespace下定义常量,而使用define则需要你写明整个namespace的完整路径:

命名空间的示例
namespace A\B\C;
// 如果要定义常量 A\B\C\FOO:
const FOO = 'BAR';
define('A\B\C\FOO', 'BAR');
namespace A{
const A1 = 1; //处在命名空间A中
define('A2', 2); //全局可调用
define('A\A3', 3); //处在命名空间A中
}
namespace B{
use const\A\A1;
use const\A\A3;
echo A1;
echo A2; //全局调用
echo A3;
}

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消