PHP Mapping for Constants

A Slice constant maps to a PHP constant. Consider the following definitions:

Slice
module M
{
    const bool      AppendByDefault = true;
    const byte      LowerNibble = 0x0f;
    const string    Advice = "Don't Panic!";
    const short     TheAnswer = 42;
    const double    PI = 3.1416;

    enum Fruit { Apple, Pear, Orange };
    const Fruit     FavoriteFruit = Pear;
}

The mapping for these constants is shown below:

PHP
namespace M
{
    define(__NAMESPACE__ . '\\AppendByDefault', true);
    define(__NAMESPACE__ . '\\LowerNibble', 15);
    define(__NAMESPACE__ . '\\Advice', "Don't Panic!");
    define(__NAMESPACE__ . '\\TheAnswer', 42);
    define(__NAMESPACE__ . '\\PI', 3.1416);
    define(__NAMESPACE__ . '\\FavoriteFruit', \M\Fruit::Pear);
}

Slice string literals that contain non-ASCII characters or universal character names are mapped to PHP string literals with these characters replaced by their UTF-8 encoding as octal escapes. For example:

Slice
module M
{
    const string Egg = "œuf";
    const string Heart = "c\u0153ur";
    const string Banana = "\U0001F34C";
}

is mapped to:

PHP
namespace M
{
    define(__NAMESPACE__ . '\\Egg', "\305\223uf");
    define(__NAMESPACE__ . '\\Heart', "c\305\223ur");
    define(__NAMESPACE__ . '\\Banana', "\360\237\215\214");
}

Slice constants are mapped to PHP constants in the enclosing namespace:

PHP
$ans = \M\TheAnswer;

See Also