Voting

: zero plus three?
(Example: nine)

The Note You're Voting On

Anonymous
8 years ago
There's an undocumented side-effect of setting the third parameter to true (case-insensitive constants): these constants can actually be "redefined" as case-sensitive, unless it's all lowercase (which you shouldn't define anyway).

The fact is that case-sensitive constants are stored as is, while case-insensitive constants are stored in lowercase, internally. You're still allowed to define other constants with the same name but capitalized differently (except for all lowercase).

<?php
// "echo CONST" prints 1, same as "echo const", "echo CoNst", etc.
define('CONST', 1, true);
echo CONST;
// Prints 1

define('CONST', 2);
echo CONST;
// Prints 2
echo CoNsT; // Prints 1
echo const; // Prints 1

// ** PHP NOTICE: Constant const already defined **
define('const', 3);
echo const;
// Prints 1
echo CONST; // Prints 2
?>

Why would you use this?

A third party plugin might attempt to define a constant for which you already set a value. If it's fine for them to set the new value, assuming you cannot edit the plugin, you could define your constant case-insensitive. You can still access the original value, if needed, by using any capitalization other than the one the plugin uses. As a matter of fact, I can't think of another case where you would want a case-insensitive constant...

<< Back to user notes page

To Top