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