Константы класса PHP – общедоступные, частные или защищенные?

Правильно ли я полагаю, что свойства const автоматически публикуются? Есть ли способ сделать их частными или защищенными?

Заранее спасибо.

Да, они доступны по всему миру, пока загружен сам класс. Насколько я знаю, вы не можете изменить доступность констант класса в PHP.

Константы класса должны иметь возможность быть закрытыми / защищенными, потому что, поскольку публика предоставляет внутренние детали класса, которые другие классы / коды могут ошибочно использовать, они могут использовать их, потому что они являются общедоступными.

Было бы неплохо узнать, что изменение частной константы будет ТОЛЬКО влиять на класс, в котором он определен. К сожалению, у нас нет этой опции.

Вспомните, когда вы изучали Object Design & Analysis … вы даете методам и атрибутам класса самый доступный доступ к ОГРАНИЧЕНИЮ, а затем расслабляете их по мере необходимости (гораздо сложнее вернуться в другую сторону, потому что другие классы / код начинают использовать их, затем нарушит другой код).

Временное решение

Лучше всего просто создать приватную или защищенную переменную и в верхнем случае показать ее постоянную. Вы всегда можете создать класс с именем constant ($ value_to_be_constant), который реализует правильные интерфейсы magic methods / spl, чтобы предотвратить его изменение.

Я знаю, что этот вопрос составляет 6 лет

Php 7.1 (в настоящее время RC1) позволяет указывать видимость на константах класса.

 class Token { // Constants default to public const PUBLIC_CONST = 0; // Constants then also can have a defined visibility private const PRIVATE_CONST = 0; protected const PROTECTED_CONST = 0; public const PUBLIC_CONST_TWO = 0; //Constants can only have one visibility declaration list private const FOO = 1, BAR = 2; } 

Дополнительная информация

  • RFC на видимость класса const
  • Сообщение в блоге о постоянной видимости класса

Начиная с php7.1 , вы можете определить свои константы класса с помощью модификаторов доступа ( public , private или protected ). Взгляните на следующий пример:

 <?php class superheroes{ public const kal_el = 'Superman'; protected const bruce_wayne = 'Batman'; # works php7.1 onwards private const anthony_stark = 'Iron Man'; # works php7.1 onwards public static function show_remaining(){ echo self::bruce_wayne, '<br />'; echo self::anthony_stark, '<br />'; } } echo superheroes::kal_el, '<br />'; superheroes::show_remaining(); 

Кредиты: http://dwellupper.io/post/48/defining-class-constants-in-php