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

    +156

    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
    <?php
    class ACL  
    {  
        var $perms = array();     // Массив : Содержит привилегия текущего пользователя
        var $userID = 0;          // Целое число : Содержит ID текущего пользователя
        var $userRoles = array(); // Массив : Содержат роли текущего пользователя
      
        function __constructor($userID = '')  
        {  
            if ($userID != '')  
            {  
                $this->userID = floatval($userID);  
            } else {  
                $this->userID = floatval($_SESSION['userID']);  
            }  
            $this->userRoles = $this->getUserRoles('ids');  
            $this->buildACL();  
        }  
        function ACL($userID='')  
        {  
            $this->__constructor($userID);  
        } 
    ?>

    Конструктор
    __constructor() предназначен для того, чтобы инициализировать объект при создании экземпляра класса ACL. Он вызывается автоматически после вот этой записи: new ACL();

    Не сразу понял, что логика тут есть, но какая-то кривая

    Запостил: DmitryDick, 02 Ноября 2014

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

    • Это в PHP5 конструктор называется __constructor. А в PHP4 конструктором был метод с именем, совпадающим с именем класса. Так что в PHP5 new ACL() выполнит ACL::__constructor(), А в PHP4 - ACL::ACL(). Кроме того, наличие var и отсутствие private / protected / public однозначно указывает на совместимость с PHP4.

      Но самое смешное в этом коде то, что при отсутствии __constructor PHP5 ведёт себя точно также, как и PHP4. Так что в данном случае именно метод __constructor совершенно избыточен.
      Ответить
      • А вдруг тут задел на тот случай, что кто-то будет наследоваться от этого класса? Ну а вдруг?
        Ответить
    • Слушайте, метода __constructOR вообще не существует. Логика автора, что "после new ACL() вызовется конструктор", такова: конструктором тут является сам метод ACL(), который и вызовет __constuctor. Но, читая комментарии, в голову приходит мысль, что автор тупой кретин
      Ответить
      • - Почему у меня не работает конструктор? Вот же - и метод есть!
        - Хмм... Попробуй добавить метод "ACL"...
        - Заработало! Чёртов PHP...
        Ответить
        • Дэвид Блейн, ах ты волшебник, мать твою, зачем ты создал php??
          Ответить
    • кодярник после рефакторинга. В ранних версиях php конструктор назывался именем класса потом называние конструктора сделали
      не зависимым от класса. метод ACL($userID='') оставили для обратной совместимости хотя ИМХО зря.
      Ответить
      • Это специально для того, чтобы замаскировать рекурсивный вызов конструктора в конструкторе.
        Ответить
    • Хорошо что код поддерживает php4, который устарел 8 лет назад

      Плохо что не поддерживают PHP2/FI
      Ответить

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