Подтвердить что ты не робот

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

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

Спасибо заранее.

4b9b3361

Ответ 1

Исторически константы класса всегда были общедоступными, пока класс был загружен, и не было никакого способа изменить это.

Начиная с PHP 7.1, они остаются открытыми по умолчанию, но теперь могут применяться модификаторы доступа. Вот пример из заметок о выпуске:

<?php
class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}

Ответ 2

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

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

Вспомните, когда вы изучали Object Design and Analysis... вы предоставляете методам и атрибутам класса наиболее доступный доступ к ресурсам, а затем расслабляете их по мере необходимости (гораздо сложнее вернуться в другую сторону, поскольку другие классы/код запускаются используя их, которые затем нарушали бы другой код).

РЕШЕНИЕ

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

Ответ 3

Я знаю, что этот вопрос 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;
}

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

Ответ 4

Как и в 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