最新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 定义常量的区别