PHP is an efficient network programming language. It is a preferred language for Web programmers because of its flexible programming and fast running. A recent authoritative survey showed that 31.6% of websites now use PHP as the main server programming language.
However, it is not easy to become a PHP programming expert. As many people think, as long as they can quickly write a few simple codes to solve a complicated problem, they are PHP programmers, real PHP experts also need to consider more other issues. The following three principles should be followed by a mature PHP programmer in programming.
1. Laziness is gold
2. write beautiful code
3. The pursuit of program speed rather than programming speed
1. Laziness is gold
Be a lazy programmer? This is a strange idea! This is because the busiest person in the world may be a computer programmer. But it is because programmers are too busy that they should learn to be lazy during programming.
For a programmer, there are two lazy Methods: First, boldly use the code of someone else's program to integrate the code into your own program or project. The second is to write some useful code to create a function library, which can be easily written in the future, saving a lot of repetitive work, so you can naturally be a little lazy. Both of these methods are very suitable for PHP programmers.
First of all, PHP is a language born and grown in a free and open environment. There are thousands of programmers around the world who are constantly striving for PHP perfection and are willing to share their talents and code with others. Every day, you can find a lot of excellent program code from some PHP websites, email lists, and newsgroups. In this way, I do not encourage you to wait all day for others to write code for you, but you can "stand on the shoulders of great people" and fully carry forward "ism ", smart Application of others' program code can save you a lot of time. Second, in PHP, you can easily create your own function library, which saves you a lot of trouble when writing programs later.
Below I will introduce several common functions, some of which come from some open source projects on the Internet and some of which are selected from the mail list. If you can add them to your own function library, sooner or later you will find yourself benefiting.
1. Common Database processing functions
Compared with other CGI functions, one of the advantages of PHP is its powerful database processing capability. However, in PHP, some specific functions are used for different databases for special processing, and common database processing functions are missing. This greatly reduces the portability of program code *, which also brings a lot of inconvenience to beginners.
On the Internet, many programmers solve this problem through encapsulation. They have compiled unified functions to deal with any popular databases-Mysql, which is popular in the Linux World, and SqlServer, which is widely used on Windows platforms. I personally like to use these functions, because some simple functions such as "query" and "next_record" can be used directly, you do not need to consider the complex things such as database connection and database handle, and do not need to consider what type of database is used.
2. Variable debugging Functions
Debugging PHP programs has always been a headache. It does not have an integrated compilation and debugging environment like other advanced languages such as VB, and do not want Perl to run in a Linux or DOS environment. In fact, we can use echo statements flexibly to debug PHP.
The following functions allow you to view the types and values of any variables in the program at any time.
Function ss_array_as_string (& $ array, $ column = 0) {$ STR = "array (N"; while (List ($ var, $ Val) = each ($ array) {for ($ I = 0; $ I <$ column + 1; $ I ++) {$ Str. = "& nbsp;" ;}$ Str. = $ var. ==>; $ Str. = ss_as_string ($ Val, $ column + 1 ). "N" ;}for ($ I = 0; $ I <$ column; $ I ++) {$ Str. = "& nbsp;" ;}return $ Str .);} function ss_object_as_string (& $ object, $ column = 0) {If (empty ($ object-> classname) {return "$ object ";} else {$ STR = $ object-> classname. "(n"; while (List (, $ var) = each ($ object-> persistent_slots) {for ($ I = 0; $ I <$ column; $ I ++) {$ Str. = "& nbsp;" ;}global $ var; $ Str. = $ var. ==>; $ Str. = ss_as_string ($ var, column + 1 ). "N" ;}for ($ I = 0; $ I <$ column; $ I ++) {$ Str. = "& nbsp;" ;}return $ Str .);}} function ss_as_string (& $ thing, $ column = 0) {If (is_object ($ thing) {return ss_object_as_string ($ thing, $ column );} elseif (is_array ($ thing) {return ss_array_as_string ($ thing, $ column);} elseif (is_double ($ thing) {return "Double (". $ thing. ")";} elseif (is_long ($ thing) {return "long (". $ thing. ")";} elseif (is_string ($ thing) {return "string (". $ thing. ")";} else {return "unknown (". $ thing. ")";}}
When necessary, simply add the following code to the program to view the types and values of the variables used in the Program (including arrays and objects:
Echo ss_as_string ($ my_variable );
Using the following statement, we can directly view the values of all the variables in the program:
Echo ss_as_string ($ GLOBALS );
3. functions that control Log information
Another important method for debugging PHP programs is to view Log information. If you can easily control the Log information level and the Log information display content, it will bring more convenience to program debugging. The following functions can be easily implemented.
Reference content: $ ss_log_level = 0; $ ss_log_filename =/tmp/ss-log; $ ss_log_levels = array (NONE => 0, ERROR => 1, INFO => 2, DEBUG => 3); function ss_log_set_level ($ level = ERROR) {global $ ss_log_level; $ ss_log_level = $ level;} function ss_log ($ level, $ message) {global $ ss_log_level, $ ss-log-filename; if ($ ss_log_levels [$ ss_log_level] <$ ss_log_levels [$ level]) {// return false without displaying Log information ;} $ fd = fopen ($ ss_log_filename, "a +"); fputs ($ fd, $ level. -[. ss_timestamp_pretty ().] -. $ message. "n"); fclose ($ fd); return true;} function ss_log_reset () {global $ ss_log_filename; @ unlink ($ ss_log_filename );}
In the above function, there are four Log-level variables. When running a PHP program, the Log information can be recorded and displayed only when the Log level is lower than the preset level value. For example, add the following statement to the program:
Ss_log_set_level (INFO );
When running a PHP program, only LOG information at the ERROR and INFO level can be recorded and displayed, while DEBUG-level information is ignored. In addition, you can set the displayed information. The statement is as follows:
The reference content is as follows: ss_log (error, "testing level error"); ss_log (Info, "testing level info"); ss_log (debug, "testing level debug ");
You can also use the following statement to clear log information at any time:
Ss_log_reset ();
4. speed test functions
To optimize the code, we need a method that can test the code running time to select the best code. The following function can test the time required to run the Code:
Reference content is as follows:
Function ss_timing_start ($ name = default) {global $ ss_timing_start_times; $ ss_timing_start_times [$ name] = explode (, microtime ());} function ss_timing_stop ($ name = default) {global $ ss_timing_stop_times; $ ss_timing_stop_times [$ name] = explode (, microtime ();} function ss_timing_current ($ name = default) {global $ ss_timing_start_times, $ ss_timing_stop_times; if (! Isset ($ ss_timing_start_times [$ name]) {return 0;} if (! Isset ($ ss_timing_stop_times [$ name]) {$ stop_time = explode (, microtime ();} else {$ stop_time = $ ss_timing_stop_times [$ name];} $ current = $ stop_time [1]-$ ss_timing_start_times [$ name] [1]; $ current + = $ stop_time [0]-$ ss_timing_start_times [$ name] [0]; return $ current ;}
Now we can easily check the execution time of any piece of code. We can even use multiple timers at the same time, you only need to set different parameters as the timer name when using the above functions.
5. debug and optimize database operations
For databases, the running speed is crucial. Although many books and articles teach you how to quickly run databases, all methods must be tested in practice. Next, we will combine the query () function in the PHPLib function library with the functions described above to compile a new query () function. Compared with the original function, this function adds the runtime monitoring function.
Function query ($ Query_String, $ halt_on_error = 1) {$ this-> connect (); ss_timing_start (); $ this-> Query_ID = @ mysql_query ($ Query_String, $ this-> Link_ID); ss_timing_stop (); ss_log (INFO, ss_timing_current (). secs -. $ Query_String); $ this-> Row = 0; $ this-> Errno = mysql_errno (); $ this-> Error = mysql_error (); if ($ halt_on_error &&! $ This-> Query_ID) {$ this-> halt ("Invalid SQL:". $ Query_String);} return $ this-> Query_ID ;}
2. write beautiful code
1. Separate background programs from front-end programs
When writing a PHP program, some code is used to process some transactions, such as database operations and mathematical operations. Other code is only displayed as the result of transaction processing, for example, some PHP code that uses echo statements to display results in HTML format on a Web browser and the HTML code that directly embeds the PHP program. First, we should clearly distinguish the two types of code, the former is called the background program, and the latter is called the front-end program.
Because PHP is an embedded programming language, that is to say, all PHP code can be embedded into HTML code, which brings a lot of convenience for programming. However, if PHP code and HTML code are mixed in a long program, this will make the program messy, not conducive to program maintenance and reading. Therefore, we need to try to port the PHP code in these programs mixed with HTML code, and encapsulate the code into a function in a special file, then, use the include statement in the HTML code to include these files, and call these functions at the appropriate location.
On the one hand, this method makes HTML code and PHP code easy to read, and on the other hand, because HTML code needs to be constantly updated, and this separation method can ensure that the background program will not be destroyed.
Different from front-end programs, background programs are more stable, structured, and rarely changed. Therefore, they should be carefully designed and managed. In fact, it is worthwhile to invest a lot of time in the design of a program. "planting trees now and enjoying the cold in the future" will make it easy to use the background program compiled in the future design work.
2. flexible use of include files
As mentioned above, background programs should be arranged in a series of include files. The include statement can be used to dynamically load the included files as needed, or the auto_prepend_file command can be used in the PHP. ini file to automatically load the files in advance.
If the latter method is used, although the benefits have been achieved once and for all, there are also some shortcomings that deserve our attention. The following code shows that it takes some time to parse a large file inclusion:
The reference content is as follows: require (timing. Inc); ss_timing_start (); Include (test. Inc); ss_timing_stop (); echo. ss_timing_current ().;?>
In the above Code, test. inc is a 1000-row file. It takes 0.6 seconds to parse the file. For a large website, this speed is not negligible.
Another disadvantage of using include files is that if a statement in a file is incorrect, the PHP program of the entire website cannot run. So be careful when using it.
In fact, the inclusion file can be parsed only when necessary. The following code parses the ABC. inc file only when the program needs it:
The following references: If (defined (_ liba_inc) return; define (_ liba_inc, 1);/** code... */?>
. Use object-oriented programming methods
PHP is also an object-oriented language. The object-oriented programming method is a software design method highly praised by excellent programmers, in PHP programming, we can give full play to the advantages of object-oriented language and encapsulate the objects in programming. In the previous code, we used an object-oriented method. For example, when managing a database, we encapsulated the query () function into the database class, which greatly facilitates code management, added the readability of the program.
3. Pursuing program speed, not programming speed
During website construction, the program running speed and website download speed are important factors that affect the success or failure of the website. As a web programmer, you should pay more attention to the code running speed. The methods described below increase the code running speed to varying degrees.
1. Use embedded HTML code instead of PHP echo statements.
Because PHP is an embedded WEB programming language, HTML code and PHP code can be embedded into each other. However, many programmers are worried that the PHP interpreter will be called multiple times when "" is used too much in HTML code to reduce the running speed of PHP code, therefore, we would rather use PHP echo statements to output HTML code rather than directly using HTML code. But the opposite is true. Every PHP page only calls the PHP interpreter once to explain all the PHP code. Therefore, the PHP code is embedded only when necessary, and most of the time the HTML code is used to input the result directly, this will not only reduce the program running speed, but also reduce the resolution of echo statements, which can often improve the code running speed.
The following code proves our conclusion. In this Code, we used the time test function described above.
Use str-replace instead of ereg-replace
Programmers who are familiar with Perl programming are more willing to use ereg_replace to complete string replacement, because the usage of ereg_replace in PHP is similar to that of pattern matching in Perl. However, the following code proves that replacing ereg_replace with str_replace can greatly improve the code running speed.
The following is the reference content: test the running speed of str_replace and ereg_replace // This code tests the running speed of str_replace emphasis;?> For ($ I = 0; $ I <1000; $ I ++) {str_replace (I>, B>, $ string). ;}?> // This code tests the running speed of ereg_replace for ($ I = 0; $ I <1000; $ I ++) {ereg_replace (<([/] *) I>, <\ 1b>, $ string). ;}?> // Print the result
Conclusion
Time when str_replace is used-
Time when ereg_pattern is used-
Run the above Code and the result is:
Time when str_replace is used-0.089757
Time when ereg_pattern is used-0.248881
From the running results, we can see that using str_replace to replace ereg_replace as a string replacement function greatly improves the code running speed.
3. Pay attention to string references.
Like many other programming languages, PHP can use double quotation marks ("") to reference strings, or single quotation marks (). However, in PHP, if double quotation marks are used to reference a string, the PHP parser will first analyze whether there is any reference to the variable in the string. If there is a variable, the variable will be replaced. If it is a single quotation mark, it is not so complex-directly display all strings contained in single quotation marks. Obviously, using single quotes to reference string variables in PHP programming is faster than using double quotes.
4. Avoid joint operations in the database
Compared with other Web programming languages, PHP databases are very powerful. However, running a database in PHP is still a very time-consuming and laborious task. Therefore, as a Web programmer, we should minimize the number of database queries, at the same time, appropriate indexes should be created for the database. Another thing worth noting is that when using PHP to operate a database, try not to use the union operation of multiple data tables. Even though the union operation can enhance the database query function, but it greatly increases the burden on the server.
To illustrate this problem, let's take a look at the simple example below.
Two data tables foo and big_foo are created in the database. In the data table foo, there is only one field that contains all the natural numbers from 1. The data table big_foo also has only one field, but contains all the natural numbers from 1 to 1,000,000. Therefore, in terms of size, big_foo is equal to foo and it performs Union operations.
The reference content is as follows: $ db-> query ("select * from foo"); 0.032273 secs $ db-> next_record (); 0.00048999999999999 secs $ db-> query ("insert into foo values (NULL)"); 0.019506 secs $ db-> query ("select * from foo as, foo as B "); 17.280596 secs $ db-> query (" select * from foo as a, foo as B where. id> B. id "); 14.645251 secs $ db-> query (" select * from foo as a, foo as B where. id = B. id "); 0.041269 secs $ db-> query (" select * from big_foo "); 25.393672 secs
The above operation results show that the speed of joining two data tables with 1000 records is not faster than that of a large data table with 1000000 records.
5. Note the difference between include and require.
In PHP, The include () and require () functions are the same, but there are some differences in usage. include () is a conditional inclusion function, while require () it is an unconditional include function. For example, in the following example, if the variable $ somgthing is true, it will contain the file somefile:
The following code references: if ($ something) {include ("somefile");} but whatever the value of $ something, the following code will include the file somefile into the file: if ($ something) {require ("somefile");} The following interesting example fully demonstrates the differences between the two functions. $ I = 1; while ($ I <3) {require ("somefile. $ I"); $ I ++ ;}
In this Code, each loop contains the same file. Obviously, this is not the original intention of the programmer. From the code, we can see that this code will include different files in each loop. To complete this function, you must turn to the include () function ():
$ I = 1;
While ($ I <3 ){
Include ("somefile. $ I ");
$ I ++;
}
6. Note the difference between echo and print.
The echo and print functions in PHP are basically the same, but there are also slight differences between the two. Print can be used as a common function in PHP Code. For example, after executing the following code, the value of the variable $ res will be 1.
$ Ret = print "Hello World ";
This means that print is available in some complex expressions, but echo is not. Similarly, the echo statement runs slightly faster than the print statement in the code, because the echo statement does not require any value to be returned.