【问题标题】:Is constant name DEFAULT not allowed in PHP?PHP中不允许常量名称DEFAULT吗?
【发布时间】:2016-10-12 21:07:52
【问题描述】:

当我尝试定义一个名为 DEFAULT 的常量时遇到错误。这是为什么呢?

<?php
define('DEFAULT', true);
var_dump(DEFAULT);
// or
class Test {
    const DEFAULT = true;
}
var_dump(Test::DEFAULT);

这会导致以下错误:

解析错误:语法错误,第 X 行 ... 中出现意外的“DEFAULT”(T_DEFAULT)

【问题讨论】:

  • default 用于switch 并保留!

标签: php constants


【解决方案1】:

default 是 PHP 中的保留语言关键字。它用于switch 块中的默认选项。

所以不,您不能在 define 语句中使用它。

【讨论】:

    【解决方案2】:

    不允许,因为DEFAULTdefault(大小写无关)是保留字。它用于switch 块:

    switch( $x )
    {
        case 1: echo $x; break;
        case 2: echo $x; break;
        case 3: echo $x; break;
        default: echo $x; break;
    }
    

    Here is a list PHP 中的保留字。

    【讨论】:

    • 这对echo $x 很重要;-)
    【解决方案3】:

    人们在这里写道,default 是一个保留字,你不应该使用等 - 这是真的。但是您仍然可以使用 constant 函数访问名为 'DEFAULT' 的常量:

    define('DEFAULT', 'Some value');
    var_dump(constant('DEFAULT'));
    

    更进一步:你可以随意命名常量,甚至

    define('#1', 'Number ONE');
    define('-100', 'Hundred!');
    define('while', 'It is WHILE!');
    

    问题是php 将在代码中处理此常量的名称,而不是您所期望的。 这就是为什么我(和其他程序员)不建议你使用这种方法。

    【讨论】:

    • 哇,我不知道你能做到这一点!很高兴你指出这一点:) 但是最好为常量 XD 找到一个不同的名称
    • 仅仅因为有解决方法,并不意味着您应该使用它来强制执行某些操作。您需要一种解决方法来执行您的理想是有原因的。在这种情况下,不推荐是轻描淡写的。它应该甚至必须完全避免。
    【解决方案4】:

    没错。它是一个保留关键字。您可以在手册here 中找到它。

    在关键字页面上,您会找到以下信息:

    这些词在 PHP 中具有特殊的含义。其中一些代表事物 看起来像函数,有些看起来像常量,等等 - 但是 它们不是,真的:它们是语言结构。你不能使用任何 以下单词中的常量、类名、函数或方法 名字。使用它们作为变量名通常是可以的,但可能会导致 混乱。

    【讨论】:

      【解决方案5】:

      从 PHP 7.0 开始,允许使用它,但只能作为一个类常量

      所以你的第一个例子在任何版本的 PHP 中都不允许,但是第二个例子在 PHP 7 中是允许的。

      查看示例:https://3v4l.org/8Hi3W

      【讨论】:

      • 它仍然会抛出相同的语法错误...3v4l.org/0Mo5u 任何引用来支持此声明?
      • 如果你用const定义它,它可以在PHP 7.0及更高版本中工作:3v4l.org/8Hi3W
      • 如果你也在一个类中命名它, 好的。那里有大预选赛。
      • 但是,限制很少。看我的回答here
      猜你喜欢
      • 2016-01-28
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多