views:

91

answers:

1

I'm reading a PHP book where the author says that symbols should be avoided except when it's valid to use them. Very informative stuff, if he could only elaborate or give code examples but he doesn't.

Can someone from the experienced PHP bunch give me an example of what these symbols are, and when it makes sense to use them or not. I'm looking for a code example that I can wrap my head around since I don't quite get it in plain English. Code is more plain English to me.

Edit:

He says you can define a string as a 'symbol' which will make this string global and constant, but it's good for security since it's constant and can't be changed by mistake or intentionally. I'm looking for concrete examples of when those symbols are used.

+6  A: 

I assume you mean Constants?

One big reason against using those in PHP is the fact that if a constant was not defined, PHP will interpret it as a string value and throw only a notice, not a fatal error as it - in my humble opinion - should.

define("NUMBER_OF_PAGES", 1);

echo NUMBER_OF_PAGES;  // outputs "1"

echo NUMBR_OF_PAGES;   // outputs literally "NUMBER_OF_PAGES" and throws 
                       // Notice: Use of undefined constant NUMBR_OF_PAGES - 
                       // assumed 'NUMBR_OF_PAGES' in xyz

// constant() is a workaround but it takes away a lot 
// of a constant's elegance IMO:

echo constant("NUMBER_OF_PAGES"); // Returns "1"
echo constant("NUMBR_OF_PAGES"); // Returns null

this makes the use of constants somewhat error-prone, especially in older applications that trigger dozens or hundreds of E_NOTICE messages by using less-than-perfect coding practices (but nothing anywhere near as bad as using an undefined constant) and make it hard to detect errors.

The cleaner your application, the less of a problem this becomes, because dealing with (and noticing) E_NOTICE level messages becomes possible. Still, an undefined constant should be a fatal error in my mind, and I regard this a design error.

IDEs with lookup functions can ease the problem somewhat, and help avoid typos.

There is also the function constant() that will return NULL if given a non-existent constant name. (See the code above.)

Concrete usage examples:

Constants are often used to define the current path and / or URL:

define("APP_WEBROOT", "http://www.mydomain.com/appname");
define("APP_WEBROOT_PATH", "/var/www/mydomain/appname");

or to define global settings:

define("MAX_PAGES", 100);
define("MAX_ITEMS_PER_PAGE", 250);
Pekka