php class постоянная видимость - PullRequest
22 голосов
/ 17 марта 2011

Можем ли мы установить видимость константы класса?
Для этого примера:

class MyClass {
    const CONST_VALUE = 'A constant value';
}

Можем ли мы указать

public const CONST_VALUE = 'A constant value';

или

private const CONST_VALUE = 'A constant value';

или

protected const CONST_VALUE = 'A constant value';

Ответы [ 7 ]

38 голосов
/ 03 апреля 2016

Обновление: модификаторы видимости для констант были добавлены в PHP 7.1 (выпущено 1 декабря 2016 года). См. RFC: Видимость констант класса поддержки .

Синтаксис выглядит следующим образом:

class ClassName {
    private const PRIVATE_CONST = 0;
    protected const PROTECTED_CONST = 0;
    public const PUBLIC_CONST = 0;
}
14 голосов
/ 17 марта 2011

Начиная с PHP7.1 модификаторы видимости разрешены для констант классов, в предыдущих версиях невозможно было установить видимость констант в классе.Они всегда публичны.См. Комментарии в http://www.php.net/manual/en/language.oop5.constants.php для получения дополнительной информации.

3 голосов
/ 21 октября 2015

В качестве альтернативы можно использовать постоянный метод, например,

private static function gravitationalConstant() {
    return 9.81;
}

Цитата из Книга Рефакторинга Фаулера :

Эта идиома менее знакома программистам на C, но очень знакома Smalltalkers (у которых не было констант в их языке). В целом я не склонен использовать это в Java, так как это менее идиоматично для языка. Однако, если вам нужно заменить простое возвращение на вычисленное значение, тогда стоит изменить поле констант на метод констант. (Я думаю, что для этого должен быть рефакторинг ....)

2 голосов
/ 17 июня 2016

В PHP последняя версия (PHP 7.1.0) будет доступна.

Пример синтаксиса был похож.

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;
}

См. Ссылку ниже. https://wiki.php.net/rfc/class_const_visibility

0 голосов
/ 02 декабря 2016

Это возможно в Php 7.1.0.Пожалуйста, посетите PHP RFC: Видимость класса поддержки постоянная

0 голосов
/ 10 июня 2016

Теперь это возможно в версии PHP 7.1 Альфа сегодня, которая добавляет Модификаторы постоянной видимости класса

0 голосов
/ 17 марта 2011

Модификаторы не разрешены для констант в php. Вы можете использовать

public static $variable = "abc";

но, к сожалению final здесь не разрешено.

...