1. PHP / Говнокод #4494

    +158

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 31 Октября 2010

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

    • само по себе решение не такое уж дерьмовое.
      по Вашему лучше было бы сделать ифейс с геттерами и копипастить свойство и геттер в каждый класс?
      Ответить
      • вообще-то explode
        Ответить
      • да
        Ответить
        • по крайней мере
          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);
         }
      }
      Ответить
    • 27-28: очередность комментариев вводит в заблуждение
      Ответить
    • В php 4 не было интерфейсов, так что...
      Ответить

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