It is possible to define() constants with reserved or
even invalid names, whose value can (only) be retrieved with
constant(). However, doing so is not recommended.
define() takes the name as an ordinary
string and does not resolve it against the current
namespace.
Inside namespace My\Namespace;,
define('MYCONST', 1) therefore defines
MYCONST in the global namespace, silently and
without error.
To place the constant in a namespace, the namespace must be part of
the name, written without a leading namespace separator, as in
define('My\Namespace\MYCONST', 1) or
define(__NAMESPACE__ . '\MYCONST', 1).
Unlike defined() and constant(),
define() does not strip a leading separator:
define('\My\Namespace\MYCONST', 1) returns true
but creates a constant that can never be retrieved.
Because the name is a plain string, aliases introduced by
use statements are not applied to it.
In a double-quoted string the namespace separators must be escaped,
as in "My\\Namespace\\MYCONST".
value
The value of the constant.
Warning
While it is possible to define resource constants, it is
not recommended and may cause unpredictable behavior.
case_insensitive
If set to true, the constant will be defined case-insensitive.
The default behavior is case-sensitive; i.e.
CONSTANT and Constant represent
different values.
Warning
Defining case-insensitive constants is deprecated as of PHP 7.3.0.
As of PHP 8.0.0, only false is an acceptable value, passing
true will produce a warning.
Note:
Case-insensitive constants are stored as lower-case.
This example illustrates the possibility to define a
constant with the same name as a
magic constant.
Since the resulting behavior is obviously confusing, it is not recommended
to do this in practise, though.