C'est une question assez ancienne, mais peut-être que cette réponse peut encore aider quelqu'un d'autre.
Vous pouvez émuler une constante publique restreinte dans une portée de classe en appliquant le mot-clé final à une méthode qui renvoie une valeur prédéfinie, comme ceci:
class Foo {
final public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
Le mot clé final sur une méthode empêche une classe étendue de redéfinir la méthode. Vous pouvez également placer le mot-clé final devant la déclaration de classe, auquel cas le mot-clé empêche l'héritage de classe.
Pour obtenir presque exactement ce qu'Alex recherchait, le code suivant peut être utilisé:
final class Constants {
public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
class Foo {
static public app()
{
return new Constants();
}
}
La valeur constante émulée serait accessible comme ceci:
Foo::app()->MYCONSTANT();