За последние 24 часа нас посетили 16607 программистов и 1179 роботов. Сейчас ищут 1759 программистов ...

self:: в Static

Тема в разделе "PHP для новичков", создана пользователем ArtemPetesburg, 22 май 2019.

  1. ArtemPetesburg

    ArtemPetesburg Новичок

    С нами с:
    11 май 2018
    Сообщения:
    48
    Симпатии:
    2
    Адрес:
    Санкт-Петербург
    Доброго времени суток, у меня возник вот такой вопрос. Увидел у парня в коде в классе User приватное свойство и статистическое. к примеру:
    Код (Text):
    1. class User {
    2.       private stasic $name;
    3.  
    4.      Функция {
    5.      self::$name - обращение к ней
    6. }
    7. }
    Первый вопрос : зачем делать свойство приватным если оно статистиеское и к нему все равно можно обратится не создавая объект и зачем тогда так делать?

    А во вторых зачем нам нужно вообще статистическое свойство само по себе? Ведь можно просто создать переменную. И что потом с ним делать? Ладно понимаю статистический метод если он ожет делать какуюто вспомогательною фнкцию, но свойство зачем?

    Обьясните мне пожалуйста я вот что то не догоняю на живом примре если можно.
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.576
    Симпатии:
    1.759
    Чтоб нельзя было обратиться за пределами класса. На статические свойства модификаторы доступа оказывают такое же действие.

    Ну во-первых статическое свойство всё-таки немного локализуется уже, даже если оно публичное, поскольку перед ним надо писать имя класса. Т.е. оно уже не засоряет глобальное пространство, и если мы вместе работаем над проектом, и ты завёл в своём классе статическое свойство name, а я завёл в своём такое же свойство, это будут гарантировано две разных переменные. А с глобальной переменной - мы попадём в большие неприятности. Одна из причин, почему глобальные переменные - зло.

    Во-вторых, иногда бывает так, что нужно хранить какое-то общее значение - какие-нибудь счётчики, справочные данные, актуальные всегда и т.п, но имеющие отношение к классу, а не просто так. для таких целей и были придуманы статические поля.
     
  3. ElisDN

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

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Изменяемое приватное статическое поле имеет смысл только для синглтона. Но синглтоны уже в прошлом.
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.576
    Симпатии:
    1.759
    Почему столь категорично? Мало ли какой алгоритм надо будет запрограммировать (я сейчас не про синглтон, а про поле)
    --- Добавлено ---
    Хотя, если честно, я не помню, чтоб я использовал их. Даже когда делал синглтоны, я всегда писал статическую локальную переменную. Но мало ли, может где вдруг и всплывёт задача, которую удобно будет решить именно так
     
  5. ElisDN

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

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Для алгоритма и простого динамического поля хватит.