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

最新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

 

 4. const的常量命名只能用直白的文本,而define()允许你用任何表达式来对常量命名。这样我们就可以执行以下操作:
for ($i = 0; $i < 32; ++$i) {
define('BIT_'. $i, 1<< $i);
}

 

 5. 类常量可见性从 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;
}

 

6. 需要注意的一点是,const可以在class和interface当中使用定义类常量 ,而define是做不到这一点的,但define可以在类方法中使用:
class Foo {
const BAR=2; // 有效
}
class Baz {
define('QUX', 2); // 无效
public function foo(
define('QUX', 2); // 有效
)
}

 

 7. 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;
}

原创文章,转载请注明:来自lenix的博客,地址 https://blog.p2hp.com/archives/7262

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