【问题标题】:php - Why can't you define a constant named EMPTYphp - 为什么不能定义一个名为 EMPTY 的常量
【发布时间】:2016-07-09 01:33:51
【问题描述】:

所以...这更多是出于好奇,而不是真正的问题。我不明白:

<?php
     define('EMPTY', 1);
     echo EMPTY;

导致:解析错误:语法错误,意外 ';',期待 '('

我的第一个想法是 empty 是为 empty 函数保留的。但后来我尝试了:

<?php
     define('IS_ARRAY', 1);
     echo IS_ARRAY;

结果:1​​

所以...我不明白。为什么空不能用作常量而例如is_array,die等可以。

【问题讨论】:

  • 你能指出原因吗?查了说明书,没什么特别的。谷歌搜索...嗯...空是一个很常见的词。

标签: php constants


【解决方案1】:

empty 不是函数而是语言结构(更像是运算符而不是函数),这意味着它由解析器在解析时解析,而不是在运行时解析。它是一个保留关键字,您不能将它用于自己的任何东西,例如函数名或常量。

empty 不能成为常规函数的原因是它的行为不同。 empty($undefined) 将首先解析$undefined,抛出一个错误,然后将null 传递给empty;这正是empty应该阻止的情况,所以它不能按正常的函数调用规则发挥作用。

【讨论】:

  • 不能接受 9 分钟。到时会接受。仍然......我不明白为什么手册没有提到这一点。空列在“功能”部分下。
【解决方案2】:

empty 是 PHP 中的保留关键字。您不能使用任何reserved 字词作为常量、类名、函数或方法名,因为这些字词在 PHP 中具有特殊含义。使用任何其他名称作为常量。

【讨论】:

    【解决方案3】:

    您可以明确地将“EMPTY”定义为常量。问题是不能直接使用。

    <?php 
     define("EMPTY", "valueForEmpty");
     echo EMPTY; // Wont work because empty is a keyword and PHP doesn't know that you mean the constant.
    
     echo constant("EMPTY"); // Works
    

    【讨论】:

      【解决方案4】:

      注意保留关键字也不区分大小写,不能定义为常量或使用runkit_function_redefine()重新定义;

      你可以找到here保留关键字的详尽列表

      【讨论】:

      • 我认为您的意思是不区分大小写。
      猜你喜欢
      • 2017-01-31
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      相关资源
      最近更新 更多