Возможно ли использовать switch при обращении к свойствам объекта?

Black Heart

Новичок
Возможно ли использовать switch при обращении к свойствам объекта?

Надеюсь вопрос корректно задал :)
Вопрос теоретический...
Итак, ситуация. Есть такой код:
PHP:
foreach($a as $key=>$value)
{
   if($key%2==0)
   {
      if($this->A)
     {
        $this->func($object->A,$var);
     }
     elseif($this->B== '1')
     {
        if($this->C)
       {
          ...какие-то действия...
          if($this->D)
          {
              ...опять какие-то действия...
          }
       }
     }
//И далее тут код по той же схеме if...else
   }
}
Напрягает количество if'оф которое растет с не слабой скоростью, так как постоянно что-то дописывается в код.
Возможно ли этот участок кода заменить на конструкцию switch-case?
PHP:
switch ($this)
{
   // Не выводит никогда...
   case "A":
   print "good";
   break;
   // Вот только это и выводит...
   default:
   print "bad";
   break;
}
Вообще можно ли избежать такого количества if..else в данной ситуации?
 

.des.

Поставил пиво кому надо ;-)
Код какой то бредовый. Может лучше поясните реальную задачу?
 

Black Heart

Новичок
Автор оригинала: .des.
Код какой то бредовый. Может лучше поясните реальную задачу?
.des., действительно корявенько написал, буду внимательнее :( Свой код не выложу: грязный он.
Пробую ещё раз на примере, если никто не поймёт - буду завтра у себя прибираться в коде и выкладывать его...

Вот такой перебор массива с конструкциями if...else и обращениями к различным свойствам и методам:
PHP:
foreach($a as $key=>$value) 
{ 
   if($key%2==0) 
   {
// Вот эти многочисленные if...else заменить на switch
      if($this->A) 
      { 
         $this->func($this->A,$value); 
      }
      if($this->B) 
      { 
         $this->func2($this->B,$value); 
      }
      // Далее опять if...elseif, if...else ...
    }
}
Хотелось бы заменить на перебор массива с конструкцией switch-case:
PHP:
foreach($a as $key=>$value) 
{ 
   if($key%2==0) 
   {
      switch ($this)
      {
         case "A":
         $this->func($this->A,$value);
         break;
         
         case "B":
         $this->func2($this->B,$value);
         break;

         ...
         ...
         ...

         default:
         $this->funcN($this->Z,$value);
         break;
      }
   }
}
Switch не работает :( Всегда идет значение по умолчанию. Почему? Как убрать это множество if...else по другому?

Зачем всё это надо? Потому как вложенность друг в друга if...else на данном участке кода скоро перейдет в такое кошмарное количество, что легко будет запутаться.
 

Quidle

Полноценный новичок
а есть разница в записи
if ($this->A)
и
if ($this == 'A')

switch у тебя будет как во втором варианте, по-моему...
 

ForJest

- свежая кровь
switch не будет так работать.
Заведи аттрибут класса селектор. В который помещай уже a, b и т.п.
и делай switch ($this-> selector).
 

Profic

just Profic (PHP5 BetaTeam)
Black Heart
если все эти твои A,B,C... исключаемые (т.е. если установлен A, то B установлен быть не может), то поможет
PHP:
switch(true) {
  case $this->A: //...
    break;
  case $this->B: //...
    break;
}
если же нет. то только заводить какой-нить новый член в котором указывать текущий статус. Но это имхо еще более гиморно чем с if/else
 

Black Heart

Новичок
ForJest, спасибо конечно, но я надеялся линк более прямой получить. По классам. Ладно хоть в танк не услал :)

Profic, на скорую руку проверка показала что работает. Правда ещё всё проверять и перепроверять надо. Спасибо.
 

ForJest

- свежая кровь
Black Heart
пошли меня в доки/маны Желательно русские и доходчивые.
Что попросил, то и получил - или тебе что-то там непонятно?

-~{}~ 30.06.05 11:51:

И там есть ссылки на другие доки.
 
Сверху