php常量不区分大小写的问题

时间:2013-02-26 17:26:22

标签: php

我用case in-sensitive参数覆盖常量。但php并没有给我“常量已定义”错误。我启用了E_ALL,E_STRICT错误。 实施例:1

define('ONE',1000);
define('one',2000,true);
echo ONE; // prints 1000
echo one; // prints 2000

在第二行中,我将'one'作为另一个常量,表示不敏感,这意味着重新定义'ONE'。但PHP没有提供任何错误/警告。

实施例:2

define('ONE',1000,true);
define('one',2000);
echo ONE; // prints 1000 with constant already defined notice
echo one; // prints 1000

我可以在这里收到错误通知。

这两个代码块之间有什么区别。?

2 个答案:

答案 0 :(得分:6)

来自documentation

  

注意:不区分大小写的常量存储为小写。

因此,当您尝试在第二个示例中定义常量的低版本时,由于先前具有相同名称的常量的大小写不敏感定义,因此已经定义了该常量。

define('ONE', 1000, true);  // defines strtolower("ONE") = "one"
define('one', 2000);        // error redefining "one"

在第一个场景中,没有这样的碰撞:

define('ONE', 1000);        // defines "ONE"
define('one', 2000, true);  // defines strtolower("one") = "one"

答案 1 :(得分:-1)

define函数中的第三个参数是case_insensitive选项。 http://php.net/manual/de/function.define.php

在第一个例子中,定义了常量ONE。并且case_insensitive的常量为true。意味着您可以通过ONE获得变量,并通过oNe,One,oNE等获得变量。

在secound示例中,首先定义一个常量ONE,其中case_insensitive为true,然后是常量。但是这次所有可能的名字(OnE,oNe,one)都已经给出,所以翻译会给你一个错误通知