Правильно ли я полагаю, что свойства 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; }
Начиная с 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