За последние 24 часа нас посетили 17735 программистов и 1698 роботов. Сейчас ищут 1706 программистов ...

Практика использование ООП

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 26 ноя 2017.

  1. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    И это (обращение к статике класса внутри инстанцируемого объекта через self и прочие фокусы подобного плана) - уродливая багофича, специфичная для php, которую не выпилили из 7.1 лишь из жалости к тем, кто эту багофичу юзает в коде вышеописанным способом. Но с версии на версию ее срежут скорее всего, по этому я б советовал избегать ее использование.
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, Вы вообще о любом использовании статики? Разве это возможно?
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Я описал конкретный пример, а не любое использование статики. Я именно про юзание бага, когда создают объект, но некие данные пишут в статическое поле в класс этого объекта, как бы "шаря" эти данные между инстансами.

    Видел упоминания, что это типа фича. А вот разрабы пыхи подтвердили, что это баг.
     
    Maputo нравится это.
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    А что в этом плохого? Это и в плюсах есть. И типичный пример, который я во всех книгах по плюсам видел - счётчик созданных экземпляров (правда, я не знаю, какого реальное применение счётчика)
     
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    плюс который никому не нужен :D
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Плохо то, что реестровые данные размазываются по всему проекту, вместо того, чтобы быть в реестре.
     
  7. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    $user1=new User(1); //тут php ищет класс User и читает его, внутри этого класса есть создание класса, который подключается к базе.
    $user2=new User(2); //тут php по барабану, что он создавал из класса такой же объект, он просто берёт нужный класс и читает его, соответственно опять подключается к бд.
    --- Добавлено ---
    Я читал эту книгу немного, вроде бы всё понятно, но когда начинаю что то делать, то всё равно не знаю, как правильно использовать ООП. Может мне стоит начать изучать YII2, что бы пришло понимание, как использовать ООП
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Немного - это до какой страницы? Yii2 можешь посмотреть, но лучше перед этим иметь базис какой-то. Там достаточно крутые вещи используются
     
  9. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    до 200 страницы
     
  10. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    То-есть
    PHP:
    1. protected static $object;
    это баго-фича, а
    PHP:
    1. private static $object;
    это уже норма? (Если данное свойство в родительском классе от которого только наследуются классы, но не создаются инстансы)
     
    #35 Maputo, 27 ноя 2017
    Последнее редактирование: 27 ноя 2017
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    По-хорошему, в инстанцируемом классе не должно быть вообще статики. В том же C# есть понятие "Статический класс". Его в принципе нельзя инстанцировать. И это правильно.

    Все, что должно храниться в глобальном реестре, должно описываться именно в таком классе, а не в статических свойствах инстанцируемых классов. Это вот есть порядок.
     
  12. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, но статический класс уж больно напоминает подключаемый модуль или библиотеку функций. Как бы при всем желании разработчиков сделать код правильнее не появились новые фичи - типа приватных конструкторов.
     
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Не знаю, даже в Java допускается в Инстанцируем классе иметь статик свойства и статик методы, кроме того майн метод там всегда статик.
     
    #38 mahmuzar, 28 ноя 2017
    Последнее редактирование: 28 ноя 2017
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Fell-x27 синглтон маст дай?
     
  15. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    А что такое инстанц класс? Какой он должен быть?
     
  16. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Dimon2x, от английского слова instance произошло т.е. в нашем случае объект.
    --- Добавлено ---
    Не статик класс, от котого можно создавать объект.
     
  17. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @[vs], не совсем. @Fell-x27 говорит не о том, что статику вообще уберут - он говорит о том, что разрабы против возможности создания экземпляров классов, в которых есть статика. Да и синглтон можно реализовать без статики, но со статикой как-то проще ИМХО.
    @Fell-x27, а есть статейка на инглише, где это обсуждается?
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Щас не найду. Но промелькивало на хабре где-то даже.
     
  19. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Как говорится смотрите доку:
    Static calls to methods that are not declared static are deprecated, and may be removed in the future.
    https://php.ru/manual/migration70.deprecated.html
     
    Fell-x27 нравится это.
  20. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @keren, в приведенной Вами ссылке речь идет о вызове нестатических методов, как статических. Это не то.
     
  21. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    О чем тогда вы писали?
     
  22. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Я писал о статических свойствах и методах. А потом пошел разговор о создании экземпляров классов со статическими свойствами и методами.
     
  23. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Но имхо там было неправильное выражение.
    Принадлежность к классу и статические свойства - это разные понятия.
     
  24. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Может "принадлежит" и не самое подходящее слово, но по контексту должно быть понятно, что оно означает.
     
  25. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Пардон - багофича это как раз:
    А просто статика в инстансах это - говноархитектура :)
    Возможно.
    --- Добавлено ---
    Вот оттуда отличная статья.