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

    +109

    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
    public function __get($name){          
            if(isset($this->fields[$name])){            
                if(class_exists($this->fields[$name]) && 
                   strcasecmp($this->fields[$name], $this->vals[$name]['mdl']) == 0 && 
                   strcasecmp(get_parent_class($this->fields[$name]), __CLASS__) == 0){    
                    $class = $this->fields[$name];
                    $id = (string)$this->vals[$name]['id'];
                    if(!$this->refsCache[$id])
                        $this->refsCache[$id] = $class::findById($this->vals[$name]['id']);
                    return $this->refsCache[$id];
                }else                
                    return $this->vals[$name];
            }elseif(isset($this->fieldsRev[$name])) 
                return $this->vals[$name];
            else throw new Exception('Not found field "'.$name.'" when reading in model');
        }
    
        public function __set($name, $value){    
            if(isset($this->fields[$name])){  
                if(class_exists($this->fields[$name]) && 
                   strcasecmp($this->fields[$name], get_class($value)) == 0 && 
                   strcasecmp(get_parent_class($this->fields[$name]), __CLASS__) == 0)
                    $this->vals[$name] = array('id' => $value->getId(), 'mdl' => strtolower($this->fields[$name]));
                else                
                    $this->vals[$name] = $value;
            }elseif(isset($this->fieldsRev[$name])) 
                $this->vals[$name] = $value;
            else throw new Exception('Not found field "'.$name.'" when writing in model');        
        }

    Пример реализации через жопу полей для базового класс модели, с ужасным оформлением кода.

    Запостил: haker, 11 Февраля 2013

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

    • показать все, что скрытоОП - хуй!
      Ответить
    • Ну вот. Зато человек знает ООП и умеет работать с исключениями.
      Ответить
    • Это еще ничего. Вот тут у меня идея реализовать универсальный класс, который на лету будет строится. Там конструкции по злее вырисовываются.
      Ответить
      • o_0 хочу видеть этот гавнокод
        Ответить
      • Можно поинтересоваться, для чего нужен универсальный класс, и в чем его универсальность ?
        Ответить
        • Как часть модульной системы. Есть какая-то сущность, например пользователь. Нужно добавить ему метод, или переопределить. Раз два и готово.
          Ответить
          • я как понимаю добавляться или переопределяться метод будет в runtime ?
            Ответить
            • Скорее в boottime, но возможно еще одумаюсь. Просто так можно получить прямо таки адский котроль, observer прикрутить, и еще что-нибудь.
              Ответить
            • скорее всего это он и имел ввиду, там в принципе не сложно... но писать такое на PHP не стоит, скорость может сильно упасть...
              хотя есть хорошее решение этой задачи, но обычные хостинги врятли предложат подобное расширение...
              Вот это расширение http://php.net/manual/ru/book.runkit.php может в runtime выполнять много магии =) переопределение классов, функций, методов... создание новых суперглобальных переменных и прочее
              Ответить

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