Есть ли в PHP опция config для предотвращения интерпретации неопределенных констант как строк? - PullRequest
5 голосов
/ 11 мая 2010

Это из руководства по php: http://us.php.net/manual/en/language.constants.syntax.php

Если вы используете неопределенную константу, PHP предполагает, что вы имеете в виду имя самой константы, как если бы вы называли ее как строку (CONSTANT vs "CONSTANT"). В этом случае будет выдана ошибка уровня E_NOTICE.

Мне действительно не нравится это поведение. Если мне не удалось определить требуемую константу, я бы предпочел, чтобы сценарий не выполнялся, поэтому я вынужден определить его. Есть ли способ заставить PHP аварийно завершить работу сценария, если он пытается использовать неопределенную константу?

Например. Оба этих скрипта делают одно и то же.

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

и

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

Я бы предпочел второй сценарий DIE и объявил, что он пытался использовать неопределенную константу DEBUG.

Ответы [ 3 ]

5 голосов
/ 11 мая 2010

Вы могли бы сделать что-то (безобразное), как это:

псевдокод:

/**
 * 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");
1 голос
/ 11 мая 2010

Я не думаю, что есть способ изменить тип выдаваемой ошибки, но вы можете изменить сообщение об ошибке на E_ALL, используя error_reporting , чтобы вы могли видеть эти ошибки при разработке:

error_reporting(E_ALL);
1 голос
/ 11 мая 2010
if(!defined('DEBUG')) die('failed.');
...