Помогите с использованием констант (0, 1, 2,4 ...)

DarkGool

Guest
Помогите с использованием констант (0, 1, 2,4 ...)

Хочу сделать возможность выбирать уровень вывода ошибок для своей программы...

Написал следующее
PHP:
define("NONE",0);
define("NOTICE",1);
define("WARNING",2);
define("ERROR",4);
define("ALL", NOTICE | WARNING | ERROR);
Понятно, что при вызове метода с параметром
PHP:
$dl->setErrorLevel(NOTICE | ERROR)
мы получим значение аргумента - 5

а как теперь сказать скрипту, что нужно именно NOTICE и ERROR показывать?
 

StUV

Rotaredom
слелать константы глобальными
в функции setErrorLevel:
PHP:
if ($arg & NOTICE) {show_notice();}
if ($arg & ERROR) {show_error();}
 

StUV

Rotaredom
в файле с реализацией класса инклудить файл с определениями констант

-~{}~ 19.08.05 12:38:

можно эти описания констант включать в файл с классом, так как его все-равно надо инклудить для создания экземпляра класса
 

kvf77

Red Devil
StUV

солнышко - свали нафиг с этого топика - хватит нести чушь
ты ваще въехал о чем человек спрашивает?

DarkGool
посмотри в доке сюда: error_reporting (http://php.net/error_reporting)
 

StUV

Rotaredom
> солнышко
=)

> посмотри в доке сюда: error_reporting (http://php.net/error_reporting)
=)))

kvf77
м.б. ты рабтаешь в продвинутом телепат-мод ? =)

к сказанному мной выше:
у меня в движке в библиотеке обработки исключений помимо перечисленных по ссылке констант еще и масса дополнительных и никакие твои еррор_репортинг при всем желании не смогут корректно реализовать необходимую мне функциональность

если твои потребности этот функционал устраивает - не надо всем остальным это навязывать
 

kvf77

Red Devil
StUV

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

StUV

Rotaredom
kvf77
> define("NOTICE",1);
> ...
> $dl->setErrorLevel(NOTICE | ERROR)

что это по твоему ?
попытка сделать ОО интерфейс для error_reporting ?
по моему нет (или не только...)
 

DarkGool

Guest
Все не то :D
Вообще-то, оказалось, что решение - разложение по степеням двойки :rolleyes:

PHP:
define("NONE",0);
define("NOTICE",1);
define("WARNING",2);
define("ERROR",4);
define("MULTI",8);
define("TERM",16);
define("ALL", NOTICE | WARNING | ERROR | MULTI | TERM);

$dl = MULTI|ERROR|NOTICE;

while ($dl > 0) {
    for($i = 0, $n = 0; $i <= $dl; $i = 1 * pow(2, $n), $n++) {
        $end = $i;
    }
    $res[] = $end;
    $dl = $dl - $end;
}
А результат - массив нужных уровней -
array(3) {
[0]=>
int(8) // MULTI
[1]=>
int(4) //ERROR
[2]=>
int(1) //NOTICE
}

Таким образом можно закодировать любое количество значений....

Правда больше 16 значений (2^16=65536) уже дает большие числа...
 
Сверху