为什么当我使用带有常量致命错误的isset()时会抛出?

时间:2017-08-27 21:54:10

标签: php

我在我的脚本中使用了isset(),如果我使用常量而不是变量,则会抛出致命错误。

我的问题: 为什么当我使用带有常量致命错误的isset()时会抛出什么?

<?php

switch($current_page) {
   case 'kb':
        define('TITLE', 'Knowledge Base');
        break;
   case 'edit':
        define('TITLE', 'Edit');
        break;
   case 'new':
        define('TITLE', 'New');
        break;
}
...
...
...
if (isset(TITLE)) {
    echo "<h1>".TITLE."</h1>";
}

我运行了一些测试,发现常量和变量都有相同的数据类型:

define('TITLE', 'Test');
$title = 'Test';

var_dump(TITLE); // string(4) "Test"
var_dump($title); // string(4) "Test"

我检查了http://php.net/manual/en/language.constants.php并且没有看到任何可以解释这一点的内容。

2 个答案:

答案 0 :(得分:4)

PHP Documentation

  

警告
isset()仅适用于变量,因为传递任何其他内容都会导致解析错误。要检查是否设置了常量,请使用defined()函数。

答案 1 :(得分:1)

如果您想检查是否定义了constant,那么您想要做的就是使用defined()功能而不是isset,顾名思义。

if (defined(DEFINE)) {
    /** It is defined... **/
}