CONSTANT names...

php.internals

Jochem Maas

21 years ago
hi guys, I was mucking around and noticed the following: define("404_SKIP", 1); does not give an error and you can successfully get the value of the constant by doing: constant("404_SKIP"); where as doing: echo 404_SKIP; gives an error. as I understand it, i.e. what the docs say, is that the following regexp expresses valid starting chars for the name of a constant (the same going for vars): /^[a-zA-Z_\x7f-\xff]/ so pretty minor thing here but I expected to see the define() throw a (fatal?) error, rather than letting me go on. kind regards, Jochem

Johannes Schlueter

21 years ago
Hi Jochem, you can get the valu of that constant with the constant() function and use such a constant with defined() so forbidding this would at least be a BC break. btw. the same goes for reserved words so define('echo', 42); is valid too but "echo echo;" doesn't work :-) johannes Jochem Maas wrote:

Andi Gutmans

21 years ago
There are plenty of such examples in many languages. As Johannes mentions, some ppl might even be "abusing" it already :) Anyway, I don't think adding necessary checks for such things, and slowing define() down (even if it's negligible) is warranted in such cases. Andi At 12:29 AM 1/5/2005 +0100, Johannes Schlueter wrote: