В PHP 5, в чем разница между использованием const
и static
?
Когда каждый уместен? И какую роль играет public
, protected
а private
игра - если таковые имеются?
php
object
constants
class-design
static-members
Крис Джейкоб
источник
источник
self::$variable
для защищенных статических и приватных статических переменных, так как я предпочитаю, чтобы имя класса упоминалось только один раз внутри себя, которое находится в самом начале класса.$
?static $my_var = 10;
в определенииstatic
переменные очень полезны в одиночных и рекурсивных функциях. Потому что вы МОЖЕТЕ изменить значение, но переменная будет инициализирована только один раз. См. Stackoverflow.com/questions/203336/… для дальнейшего объяснения, как создать синглтон. Для меня это те ситуации, в которых я предпочитаю статические переменные.И последнее, на что следует обратить внимание: const всегда статичен и общедоступен. Это означает, что вы можете получить доступ к const из класса следующим образом:
За пределами класса вы можете получить к нему доступ так:
источник
Константа - это просто константа, т.е. вы не можете изменить ее значение после объявления.
Статическая переменная доступна без создания экземпляра класса и, следовательно, используется всеми экземплярами класса.
Кроме того, в функции может быть статическая локальная переменная, которая объявляется только один раз (при первом выполнении функции) и может сохранять ее значение между вызовами функций, например:
источник
Когда речь идет о наследовании классов можно различать между постоянной или переменной в различных областях, используя
self
иstatic
ключевые слова. Проверьте этот пример, который иллюстрирует, как получить доступ к чему:А затем сделайте:
или:
Вывод:
Другими словами,
self::
относится к статическому свойству и константе из той же области видимости, где она вызывается (в данном случаеPerson
суперкласс), в то время какstatic::
будет обращаться к свойству и константе из области видимости во время выполнения (поэтому в этом случае вPirate
подклассе).Подробнее о позднем статическом связывании читайте здесь на php.net .
Также проверьте ответ на другой вопрос здесь и здесь .
источник
Объявление метода или свойства класса как статического делает их доступными без необходимости создания экземпляра класса.
Константа класса похожа на обычную константу и не может быть изменена во время выполнения. Это также единственная причина, по которой вы когда-либо будете использовать const.
Частные, публичные и защищенные - это модификаторы доступа, которые описывают, кто может получить доступ к какому параметру / методу.
Публичный означает, что все другие объекты получают доступ. Приватный означает, что только экземпляр класса получает доступ. Защищенный означает, что экземпляр класса и производные классы получают доступ.
источник
Вот что я узнал о статических членах, константных переменных и модификаторах доступа (приватных, публичных и защищенных). постоянная
Определение
Как видно из названия, значения постоянной переменной не могут быть изменены. Константы отличаются от обычных переменных тем, что вы не используете символ $ для их объявления или использования.
Значение должно быть константным выражением, а не (например) переменной, свойством, результатом математической операции или вызовом функции.
Объявление константы в php
Область действия Константы является глобальной и может быть доступна с помощью ключевого слова self
статический
Определение
Ключевое слово Static может использоваться для объявления класса, функции-члена или переменной. Доступ к статическим членам класса является глобальным, а также с помощью ключевого слова self. Объявление свойств или методов класса как статических делает их доступными без необходимости создания экземпляра класса , Свойство, объявленное как статическое, не может быть доступно с экземпляром объекта класса (хотя статический метод может). Если не используется объявление видимости (public, private, protected), то свойство или метод будут обрабатываться так, как если бы они были объявлены как public. Потому что статические методы могут вызываться без создания экземпляра объекта.
Пример статического свойства
Пример доступа к статическим свойствам и функциям
Государственный, частный, защищенный (AKA модификаторы доступа)
Прежде чем читать определение ниже, прочитайте эту статью об инкапсуляции. Это поможет вам глубже понять концепцию
Ссылка 1 википедия
Учебники указывают ссылку на инкапсуляцию
Определение
Используя частные, публичные, защищенные ключевые слова, вы можете контролировать доступ к членам в классе. Члены класса, объявленные публичными, могут быть доступны везде. Члены, объявленные защищенными, могут быть доступны только внутри самого класса и унаследованных и родительских классов. Члены, объявленные как закрытые, могут быть доступны только классу, который определяет член.
пример
Пример доступа к публичным, частным и защищенным членам
Для получения дополнительной информации прочитайте эту документацию PHP о видимости Php Doc
Рекомендации: php.net
Я надеюсь, что вы поняли концепцию. Спасибо за чтение :) :) Хорошего вам
источник
Итак, резюмируем @Matt отличный ответ:
если нужное вам свойство не должно быть изменено, то константа является правильным выбором
если нужное свойство может быть изменено, используйте вместо него статический
Пример:
Изменить: Важно отметить, что PHP 7.1.0 представил поддержку для определения видимости констант класса .
источник