Constants are an underused part of PHP. If you have a website with more than 5 pages, you should probably be using them.
I'm going to use an example to demonstrate the usefulness of constants. Let's say you have an image gallery and you let people upload images. Here's the function that adds an uploaded image to the gallery:
function addPicture($picture) { //Picture bigger than 100,000 bytes if($picture=>size > 100000) return false; //Picture's name is larger than 20 characters else if(strlen($picture=>name) > 20) return false; //Picture is not an accepted file type else if(strpos('jpg, gif, png',$picture=>type)===false) return false; //Passed all validation else return $picture=>add(); }
As you can see, we have certain requirements for a picture to be uploaded. We also have to tell people these requirements somewhere. Here are some instructions on our upload form:
<p>Your image must meet the following requirements:</p> <ul> <li>It can't be larger than 100kb</li> <li>The file name can't be longer than 20 characters</li> <li>It must be in one of the following formats: jpg, gif, png</li> </ul>
We also have similar instructions in our FAQ and other help pages. What happens if we want to increase the size to 200kb? We would have to replace the text everywhere it appears. This is time consuming and leaves a lot of room for human error.
Wouldn't it be nice if we only had to change the value once? Constants in PHP are a perfect solution to this problem. In PHP, constants are declared using the define() function. Here's the constants.php script that declares all our constants:
//maximum file size in bytes define('MAX_FILE_SIZE',100000); //maximum length of file name define('MAX_FILENAME_LENGTH',20); //accepted file types define('FILE_TYPES','jpg, gif, png'); //maximum file size in kilobytes define('MAX_FILE_SIZE_KB',intval(MAX_FILE_SIZE/1024));
Now we need to add these constants into our pages. Here's the revised addPicture() function:
//Load the constant declarations include "constants.php"; function addPicture($picture) { //Picture bigger than MAX_FILE_SIZE if($picture=>size > MAX_FILE_SIZE) return false; //Picture's name is larger than MAX_FILENAME_LENGTH characters else if(strlen($picture=>name) > MAX_FILENAME_LENGTH) return false; //Picture is not an accepted file type else if(strpos(FILE_TYPES,$picture=>type)===false) return false; //Passed all validation else return $picture=>add(); }
Here's our revised instruction page:
<?php //Load the constant declarations include "constants.php"; ?> <p>Your image must meet the following requirements:</p> <ul> <li>It can't be larger than <?php //display max file size in kilobytes echo MAX_FILE_SIZE_KB; ?>kb</li> <li>The file name can't be longer than <?php //Display max number of characters for file name echo MAX_FILENAME_LENGTH; ?> characters</li> <li>It must be in one of the following formats: <?php //Display list of allowed file types echo FILE_TYPES; ?></li> </ul>
Hopefully this gives you an idea about how to use constants in your site. Here are some things to keep in mind about constants:
- They are not variables and do not have a '$' in front.
- They are generally named in all caps with underscores between words.
- They can only hold scalar values (ie. no arrays or objects). If you want to store an array or object in a constant, use the serialize() function.
2 comments:
thank u r information
it very useful
Hello Jeremy, thanks for this awesome post, i have always wondered how best to make it easier for users to upload pictures on a site i was building, this was handy and straight to the point...can i reach you via facebook to help me in several other challenges i face ? would be glad to connect with you
Post a Comment