On Sun, Jun 8, 2008 at 10:50 PM, Tim Starling tstarling@wikimedia.org wrote:
I had this argument with Yurik over constants in the web API. He said that constants provide validation because they'll throw a notice if you use one that's not defined.
But:
1) They're longer, due to prefixing to avoid namespace collisions
2) They're harder to read, due to greater length, possibly cryptic prefixes, and the inevitable uppercasing.
3) They're prone to collisions if you actually use numerical values.
4) They're impossible to use if you prefix them correctly -- that is, as class constants rather than APCOND_ or GAID_ or similar gibberish -- and want to use them in, say, a config option, since AutoLoader.php isn't loaded at that point (is it?). And if it were, loading an entire class on every page load for the sake of some constants seems a little unnecessary. (Although, since it doesn't have to be parsed, does it really take any time to load class/function definitions with an opcode cache?)
If you want error-checking you can throw an error in your function if it's passed a bogus value.
I'm not convinced, I think they're pointless, except when you want to make a bitfield.
Why not just use an array, then?