PHP-определить константу внутри класса
Как я могу определить константу внутри класса и сделать ее видимой только при вызове в контексте класса?
....что-то вроде Foo::app()->MYCONSTANT;
(и если называется как MYCONSTANT игнорируется)
5 ответов:
посмотреть Константы-Класс:
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".
EDIT - возможно, то, что вы ищете это статические свойства / переменные:
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"
это и старый вопрос, но теперь на 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:
bar Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …Примечание: Начиная с PHP 7.1.0 модификаторы видимости разрешены для констант класса.
Подробнее здесь
class Foo { const BAR = 'baz'; } echo Foo::BAR;это единственный способ сделать константы-класс. Эти константы всегда глобально доступны через
Foo::BAR, но они не доступны через простоBAR.для достижения синтаксиса, как
Foo::baz()->BAR, вам нужно будет вернуть объект из функцииbaz()классаFooчто есть свойстваBAR. Но это не постоянная величина. Любой постоянный вы определяете всегда глобально доступны из любого места и не может быть ограничено результатами вызова функции.
Это довольно старый вопрос, но, возможно, этот ответ все еще может помочь кому-то еще.
вы можете эмулировать общедоступную константу, которая ограничена в области класса, применяя ключевое слово final к методу, который возвращает предопределенное значение, например:
class Foo { // This is a private constant final public MYCONSTANT() { return 'MYCONSTANT_VALUE'; } }ключевое слово final в методе не позволяет расширяющемуся классу переопределить метод. Вы также можете разместить ключевое слово final в объявлении класса, и в этом случае ключевое слово предотвращает классе Наследование.
чтобы получить почти точно то, что Алекс искал, можно использовать следующий код:
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