запутался с define()'ами

ilkz

Новичок
запутался с define()'ами

Подскажите, плз, где косяк:
PHP:
function news()
  {
    if(REGISTERED==true && DATE_COLOR_REGISTERED==true && NEWS_COLOR_REGISTERED==true)
      {
          какой-то код;
      }
    elseif(func_num_args()==0)
      {
        define('REGISTERED', 'true', true);
      }
    elseif(func_num_args()==2)
      {
        switch(func_get_arg(0))
          {
            case 'SET_DATE_COLOR':
              {
                $v=func_get_arg(1);
                define('DATE_COLOR', $v, true);
                define('DATE_COLOR_REGISTERED', 'true', true);
                break;
              }
            case 'SET_NEWS_COLOR':
              {
                $v=func_get_arg(1);
                define('NEWS_COLOR', $v, true);
                define('NEWS_COLOR_REGISTERED', 'true', true);
                break;
              }
          }
      }
    else{echo "<b>ERROR:</b> bad syntax for calling function <b>news()</b>";}
  }
При вызове:

news();
news('SET_DATE_COLOR', 'red');
news('SET_NEWS_COLOR', 'yellow');

пхп ругается на первое условие (не определена константа REGISTERED), хотя и выполняет его. Но выполняет не так как надо...
 

ilkz

Новичок
Как видите, первым запуском - мы регистрируем функцию, вторым - цвет даты, третим - цвет текста, но даже если вызвать функцию четвертый раз - все равно тоже самое, хотя все дефайны определены...
 

4m@t!c

Александр
Вообще-то ругается на все твои константы. Почитай что такое define() и defined()

-~{}~ 26.01.05 19:38:

я не могу понять, когда ты описываешь функцию, то у тебя функция без параметров, а когда ты ее вызываешь, то у тебя передаются параметры.
 

ilkz

Новичок
Да. Как видишь, там есть проверка: если ф-я вызвана БЕЗ параметров, то регится флаг REGISTERED, индицирующий о том, что ф-ю уже вызывали; если ф-я вызвана С ПАРАМЕТРАМИ, то регистрируются вещи, соответствующие сообщениям в первом параметре... :D Ну, и если при вызове ф-ии ВСЕ флаги оказываются истинными - печатаем новость.

Вот этот код запускает ф-ю:

PHP:
            switch($property)
              {
                 case 'content-type':
                     {
                         switch($value)
                             {
                                 case 'news':
                                     {
                                         news();
                                         break;
                                     }
                                 break;
                             }
                         break;
                     }
                 case 'date-color':
                     {
                         news('SET_DATE_COLOR', $value);
                         break;
                     }
                 case 'news-color':
                     {
                         news('SET_NEWS_COLOR', $value);
                         break;
                     }
                     default: errortag($tagname,$property,$value,'property');
              }
-~{}~ 26.01.05 20:49:

Начинаю подозревать, что либо весь алгоритм в корне неправильный, либо я попросту зарутался :)
 

4m@t!c

Александр
у тебя не инициализированы Именованные константы.. С чего ты взял, что РНР будет "неизвестно что" сравнивать с определенными значениями? Вообщем - вылезла оишбка, оня явно тебе указала, что у тебя не определены константы. Ее и фикси.
З.Ы. Алгоритм грустный....
 

ilkz

Новичок
Кстати, при последнем (да и последующих) вызове все флаги оказываются задефайнеными и установленными в истину, как и требуется. Но первое условие на отруб не хочет работать. Пробовал все - и просто defined() и ФЛАГ==true и даже связки (defined(ФЛАГ) && ФЛАГ==true) - пофиг. (кстати, в последнем случае первое условие вообще не работает (хотя во всех предыдущих оно работало, но с хинтами интерпретатора)...

Как вариант - расставить собаки перед флагами, но это слишком уж некрасиво и, к тому же, в этом случае все равно условие работает неправильно...
 

ilkz

Новичок
Все было прочитано...

кажется, я начинаю сходить с ума :)))))))..........................
надо все заново делать - с нуля :)
 

Varg

Guest
И когда начнёшь делать заново, незабудь осознать, что не стоит использовать константы в качестве бинарных переменных =)
 
Сверху