代码之家  ›  专栏  ›  技术社区  ›  mrbinky3000

PHP中是否有配置选项以防止未定义的常量被解释为字符串?

  •  5
  • mrbinky3000  · 技术社区  · 16 年前

    这是来自PHP手册: http://us.php.net/manual/en/language.constants.syntax.php

    如果使用未定义的常量,则php假定您是指该常量本身的名称,就像您将其作为字符串调用一样(常量与“常量”)。发生这种情况时,将发出E级通知错误。

    我真的不喜欢这种行为。如果我未能定义一个必需的常量,我宁愿脚本失败,这样我就不得不定义它。如果脚本试图使用未定义的常量,是否有任何方法强制PHP使其崩溃?

    例如。这两个脚本都执行相同的操作。

    <?php
    define('DEBUG',1);
    if (DEBUG) echo('Yo!');
    ?>
    

    <?php
    if(DEBUG) echo('Yo!');
    ?>
    

    我宁愿第二个脚本死掉并声明它试图使用未定义的常量调试。

    3 回复  |  直到 16 年前
        1
  •  5
  •   powtac    16 年前

    你可以这样做(丑):

    伪代码:

    /**
     * A Notice becomes an Error :)
     */
    function myErrorHandler($errno, $errstr, $errfile, $errline) {
        if ($errno == E_NOTICE) { // = 8 
            if (substr($errstr ... )) { // contains something which looks like a constant notice...   
                 trigger_error('A constant was not defined!', E_USER_ERROR);
            }
        }
    }
    set_error_handler("myErrorHandler");
    
        2
  •  1
  •   scaryzet    16 年前
    if(!defined('DEBUG')) die('failed.');
    
        3
  •  1
  •   Geoff    16 年前

    我认为没有办法改变抛出的错误类型,但是您可以将错误报告改为 E_ALL 使用 error_reporting 以便在开发过程中看到这些错误:

    error_reporting(E_ALL);
    
    推荐文章