"PHP" / Говнокод #4494 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
// Итак, определим класс Namer.
class Namer {
   var $name;
   var $surname;
   function getName() { return $this->name; }
   function getSurname() { return $this->surname; }
}



// Как видим, интерфейсная часть полностью определена. Осталось реализовать два механизма обработки входной строки. Сделаем это мы в двух классах-наследниках SpaceNamer и CommaNamer.


//// класс для обработки строки в формате "имя фамилия"
class SpaceNamer extends Namer {
   function SpaceNamer($full_name) {
      $splitter_pos = strpos($full_name, ' '); // находим пробел
      $this->name = substr($full_name, 0, $splitter_pos); // все, что до пробела - это имя
      $this->surname = substr($full_name, $splitter_pos+1); // после пробела - фамилия
   }
}

//// класс для обработки строки в формате "фамилия,имя"
class CommaNamer extends Namer {
   function CommaNamer($full_name) {
      $splitter_pos = strpos($full_name, ','); // находим запятую
      $this->name = substr($full_name, $splitter_pos+1); // все, что до запятой - это фамилия
      $this->surname = substr($full_name, 0, $splitter_pos); // после запятой - имя
   }
}

и интерфейсы не нужны!

Запостил: Morgan Morgan, (Updated )

Комментарии (14) RSS

  • само по себе решение не такое уж дерьмовое.
    по Вашему лучше было бы сделать ифейс с геттерами и копипастить свойство и геттер в каждый класс?
    Ответить
      • по крайней мере
        interface INamer
        {
           public function getName();
           public function getSurname();
        }

        был бы очень кстати
        Ответить
          • а тут дело даже не в копипасте, а в пложении лишних сущностей. по моему для связанных данных типа имя+фамилия и их выковыривания 3 штуки -- это слишком много. Будь оно абстрактный класс или интерфейс - те же яйца.
            я вон еще вчера дал решение без всякой копипасты: 1 класс с 2 полями и соотв. геттерами и 2 варианта 1 метода толщиной в 1 строку. По моему изящнее и придумать нельзя.
            Ответить
            • я, конечно, дико-дико извиняюсь, но почему в этом случае нельзя обойтись вообще без полей?..
              Ответить
              • и без классов? зависит от задачи, но скорее всего обьект User нам еще понадобится
                Ответить
  • и интерфейсы не нужны!
    class User {
       private $name;
       private $surname;
       public function getName() { return $this->name; }
       public function getSurname() { return $this->surname; }
    
       public function parse($fullname,$delim=' ') {
         list($this->surname,$this->name)=explode($delim,$fullname,2);
         // list($this->surname,$this->name)=preg_split('/[, ]/',$fullname,2);
       }
    }
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8