PHP – определение константы внутри класса

Как определить константу внутри класса и сделать так, чтобы она была видна только при вызове в контексте класса?

…. что-то вроде Foo::app()->MYCONSTANT;

(и если вы MYCONSTANT чтобы MYCONSTANT был проигнорирован)

См. Константы класса :

 class MyClass { const MYCONSTANT = 'constant value'; function showConstant() { echo self::MYCONSTANT. "\n"; } } echo MyClass::MYCONSTANT. "\n"; $classname = "MyClass"; echo $classname::MYCONSTANT. "\n"; // As of PHP 5.3.0 $class = new MyClass(); $class->showConstant(); echo $class::MYCONSTANT."\n"; // As of PHP 5.3.0 

В этом случае эхо MYCONSTANT само по себе поднимет уведомление о неопределенной константе и "MYCONSTANT" имя константы, преобразованное в строку: "MYCONSTANT" .


РЕДАКТИРОВАТЬ. Возможно, именно то, что вы ищете, это статические свойства / переменные :

 class MyClass { private static $staticVariable = null; public static function showStaticVariable($value = null) { if ((is_null(self::$staticVariable) === true) && (isset($value) === true)) { self::$staticVariable = $value; } return self::$staticVariable; } } MyClass::showStaticVariable(); // null MyClass::showStaticVariable('constant value'); // "constant value" MyClass::showStaticVariable('other constant value?'); // "constant value" MyClass::showStaticVariable(); // "constant value" 
 class Foo { const BAR = 'baz'; } echo Foo::BAR; 

Это единственный способ сделать классовые константы . Эти константы всегда доступны по всему миру через Foo::BAR , но они недоступны только через BAR .

Чтобы получить такой синтаксис, как Foo::baz()->BAR , вам нужно будет вернуть объект из функции baz() класса Foo которая имеет свойство BAR . Однако это не константа. Любая константа, которую вы определяете, всегда доступна по всему миру из любого места и не может быть ограничена результатами вызова функции.

Это и старый вопрос, но теперь на PHP 7.1 вы можете определить постоянную видимость.

ПРИМЕР

 <?php class Foo { // As of PHP 7.1.0 public const BAR = 'bar'; private const BAZ = 'baz'; } echo Foo::BAR.PHP_EOL; echo Foo::BAZ.PHP_EOL; ?> 

Вывод приведенного выше примера в PHP 7.1:

 бар

 Неустранимая ошибка: нечистая ошибка: не удается получить доступ к закрытому const Foo :: BAZ в ...

Примечание. Начиная с PHP 7.1.0 модификаторы видимости допускаются для констант класса.

Больше информации здесь

Это довольно старый вопрос, но, возможно, этот ответ может помочь кому-то другому.

Вы можете эмулировать публичную константу, которая ограничена в пределах класса, применяя последнее ключевое слово к методу, который возвращает заданное значение, например:

 class Foo { // This is a private constant final public MYCONSTANT() { return 'MYCONSTANT_VALUE'; } } 

Последнее ключевое слово для метода предотвращает повторный определение метода расширения. Вы также можете поместить ключевое слово final перед объявлением класса, и в этом случае ключевое слово предотвращает класс Inheritance.

Чтобы получить почти то, что Алекс искал, можно использовать следующий код:

 final class Constants { public MYCONSTANT() { return 'MYCONSTANT_VALUE'; } } class Foo { static public app() { return new Constants(); } } 

Эмулированное постоянное значение будет доступно следующим образом:

 Foo::app()->MYCONSTANT(); 

Вы можете определить константу класса в php. Но ваша константа класса была бы доступна и из любого экземпляра объекта. Это функциональность php. Однако с php7.1 вы можете определить свои константы класса с помощью модификаторов доступа ( public , private или protected ).

Работа будет заключаться в том, чтобы определить вашу константу как private или protected а затем сделать ее читаемой через static function . Эта функция должна возвращать константные значения только при вызове из статического контекста.

Вы также можете создать эту статическую функцию в своем родительском классе и просто наследовать этот родительский класс на всех других классах, чтобы сделать его по умолчанию.

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