Постоянная видимость класса php
Можем ли мы установить видимость константы класса?
Для этого примера:
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';
Ответы
Ответ 1
Начиная с PHP7.1 модификаторы видимости разрешены для констант классов, в предыдущих версиях было невозможно установить видимость констант в классе. Они всегда публичны. См. Комментарии по адресу http://www.php.net/manual/en/language.oop5.constants.php для получения дополнительной информации.
Ответ 2
Обновление: модификаторы видимости для констант были добавлены в PHP 7.1 (выпущено 1 декабря 2016 г.). См. RFC: Постоянная видимость класса поддержки.
Синтаксис выглядит следующим образом:
class ClassName {
private const PRIVATE_CONST = 0;
protected const PROTECTED_CONST = 0;
public const PUBLIC_CONST = 0;
}
Ответ 3
Альтернативой может быть использование метода констант, например
private static function gravitationalConstant() {
return 9.81;
}
Цитата из Книга рефакторинга Фаулера:
Эта идиома менее знакома программистам на C, но хорошо знакома Smalltalkers (у которых на их языке не было констант). В целом я не склонен использовать это в Java, поскольку он менее идиоматичен для языка. Однако, если вам нужно заменить простой доход с вычисленным значением, то стоит изменить постоянное поле на постоянный метод. (Думаю, для этого должен быть рефакторинг....)
Ответ 4
В 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
Ответ 5
Модификаторы не допускаются для констант в php.
Вы можете использовать
public static $variable = "abc";
но, к сожалению, final
здесь не разрешено.
Ответ 6
Теперь в PHP 7.1 выпущен Alpha сегодня, который добавляет Class постоянные модификаторы видимости
Ответ 7
Это возможно в Php 7.1.0. Пожалуйста, посетите PHP RFC: поддержка постоянной видимости класса класса