Это довольно старый вопрос, но, возможно, этот ответ все еще может помочь кому-то еще.
Вы можете эмулировать открытую константу, которая ограничена в области видимости класса, применяя ключевое слово final к методу, который возвращаетпредопределенное значение, например:
class Foo {
// This is a private constant
final public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
Последнее ключевое слово в методе не позволяет расширяющемуся классу переопределить метод.Вы также можете поместить ключевое слово final перед объявлением класса, и в этом случае ключевое слово предотвращает наследование класса.
Чтобы получить почти точно то, что Алекс искал, можно использовать следующий код:
final class Constants {
public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
class Foo {
static public app()
{
return new Constants();
}
}
Значение эмулируемой константы будет доступно следующим образом:
Foo::app()->MYCONSTANT();