PHP es un lenguaje de programación de redes eficiente. Debido a sus ventajas de escritura flexible y ejecución rápida, rápidamente se ha convertido en el lenguaje preferido de los programadores web. Una encuesta autorizada no hace mucho mostró que el 31,6% de los sitios web utilizan actualmente PHP como principal lenguaje de programación del lado del servidor.
Sin embargo, no es fácil convertirse en un maestro de la programación PHP. No es como mucha gente imagina, siempre que puedas escribir rápidamente algunos códigos simples para resolver un problema complejo, eres un maestro en programación PHP. Un verdadero maestro de PHP también debe considerar muchas otras cuestiones. Las siguientes tres pautas son las pautas que un programador PHP maduro debe seguir primero en programación.
1. La pereza es oro
2. Escribe código hermoso
3. Persigue la velocidad de programación, no la velocidad de programación
1. La pereza es oro
¿Eres un programador vago? ¡Esta idea es tan extraña! Porque probablemente las personas más ocupadas del mundo sean programadores informáticos. Pero es precisamente porque los programadores están demasiado ocupados que deberían aprender a ser vagos al programar.
Para un programador, hay dos formas perezosas: primero, utilizar audazmente códigos de programas ya preparados por otras personas e integrar estos códigos en sus propios programas o proyectos. El segundo es escribir algunos códigos útiles para construir una biblioteca de funciones, que se pueda usar fácilmente al escribir programas en el futuro. Esto ahorra mucho trabajo repetitivo y, naturalmente, lo hace menos vago.
Estos dos métodos perezosos son muy adecuados para programadores de PHP.
En primer lugar, PHP es un lenguaje que nace y crece en un entorno abierto y gratuito. Hay miles de programadores en todo el mundo que se han esforzado constantemente por alcanzar la perfección de PHP y también están dispuestos a compartir su ingenio y el código que escriben con otros. Puede encontrar una gran cantidad de códigos de programas excelentes todos los días en algunos sitios web PHP, listas de correo y grupos de noticias. Al decir esto, no te animo a que esperes todo el día a que otros escriban código para ti, pero puedes "apoyarte sobre los hombros de grandes hombres" y promover plenamente la "doctrina del uso de la aplicación inteligente del código de programa de otras personas". ahorrarle mucho tiempo. En segundo lugar, en PHP, puede crear fácilmente su propia biblioteca de funciones, lo que puede ahorrarle muchos problemas al escribir programas en el futuro.
El siguiente autor le presenta varias funciones comunes. Algunas de estas funciones provienen de algunos proyectos de código abierto en Internet y otras se seleccionan de la lista de correo. Si puede agregarlos a su propia biblioteca, tarde o temprano se beneficiará de ellos.
1. Funciones generales de procesamiento de bases de datos
En comparación con otras funciones CGI, una de las ventajas de PHP es que tiene capacidades de procesamiento de bases de datos muy poderosas. Sin embargo, en PHP, se utilizan algunas funciones específicas para manejar diferentes bases de datos y faltan funciones generales de procesamiento de bases de datos. Esto reduce en gran medida la portabilidad del código del programa, lo que también genera muchos inconvenientes para los amigos principiantes en programación.
En Internet, muchos programadores han resuelto este problema encapsulando clases. Escribieron funciones unificadas para manejar cualquier base de datos popular, ya sea Mysql, que es popular en el mundo Linux, o SqlServer, que es muy popular en plataformas Windows. Personalmente, me gusta mucho usar estas funciones, porque puedes usar directamente algunas funciones simples como "consulta" y "next_record" sin tener que considerar cosas complicadas como conexiones de bases de datos y identificadores de bases de datos, y mucho menos considerar qué base de datos estás usando. .
Si necesita estas funciones, puede obtenerlas visitando las siguientes URL:
http://phplib.netuse.de/
http://phpclasses.UpperDesign.com/browse.html/package/20
http://phpdb.linuxbox.com/
http://www.phpchina.com
2. Función de depuración variable
La depuración de programas PHP siempre ha sido un dolor de cabeza. No tiene un entorno integrado de compilación y depuración como los lenguajes de alto nivel como VB, ni tiene el mismo. capacidad de ser utilizado en programas PHP como Perl Ejecutar directamente en entorno Linux o DOS. De hecho, podemos completar la depuración de PHP usando de manera flexible la declaración echo.
Las siguientes funciones le permiten verificar el tipo y valor de cualquier variable en el programa en cualquier momento.
función ss_array_as_string (&$matriz, $columna = 0) {
$cadena = "Matriz(n";
mientras(lista($var, $val) = cada($matriz)){
para ($i = 0; $i < $columna+1; $i++){
$cadena .= " ";
}
$cadena .= $var.==> ;
$cadena .= ss_as_string($val, $columna+1)." n";
}
para ($i = 0; $i < $columna; $i++){
$cadena .= " ";
}
devolver $cadena);
}
función ss_object_as_string (&$objeto, $columna = 0) {
if (vacío($objeto->nombre de clase)) {
devolver "$objeto";
} demás {
$cadena = $objeto->nombre de clase."( n";
while (lista(,$var) = cada($objeto->persistent_slots)) {
para ($i = 0; $i < $columna; $i++){
$cadena .= " ";
}
global$$var;
$cadena .= $var.==> ;
$cadena .= ss_as_string($$var, columna+1)." n";
}
para ($i = 0; $i < $columna; $i++){
$cadena .= " ";
}
devolver $cadena);
}
}
función ss_as_string (&$cosa, $columna = 0) {
si (is_object($cosa)) {
return ss_object_as_string($cosa, $columna);
}
elseif (is_array($cosa)) {
return ss_array_as_string($cosa, $columna);
}
elseif (is_double($cosa)) {
return "Doble(".$cosa.")";
}
elseif (is_long($cosa)) {
return "Largo(".$cosa.")";
}
elseif (is_string($cosa)) {
return "Cadena(".$cosa.")";
}
demás {
return "Desconocido(".$cosa.")";
}
}
Cuando sea necesario, simplemente agregue el siguiente código al programa para ver los tipos y valores de las variables (incluidas matrices y objetos) utilizadas en el programa:
echo ss_as_string($my_variable);
Usando la siguiente declaración, podemos ver directamente los valores de todas las variables en el programa:
echo ss_as_string($GLOBALS);
3. Funciones que controlan la información de registro
Otra forma importante de depurar programas PHP es ver la información de registro. Si puede controlar fácilmente el nivel de información de registro y el contenido de visualización de la información de registro, será más conveniente para la depuración del programa. Las siguientes funciones pueden implementar fácilmente esta función.
$ss_log_level = 0;
$ss_log_filename = /tmp/ss-log;
$ss_log_levels = matriz(
NINGUNO => 0,
ERROR => 1,
INFORMACIÓN => 2,
DEPURACIÓN => 3);
función ss_log_set_level ($nivel = ERROR) {
$ss_log_level globales;
$ss_log_level = $nivel;
}
función ss_log ($nivel, $mensaje) {
global $ss_log_level, $ss-log-filename;
si ($ss_log_levels[$ss_log_level] < $ss_log_levels[$nivel]) {
//No mostrar información de registro
devolver falso;
}
$fd = fopen($ss_log_filename, "a+");
fputs($fd, $nivel. - [.ss_timestamp_pretty().] - .$message."n");
fclose($fd);
devolver verdadero;
}
función ss_log_reset () {
global $ss_log_filename;
@unlink($ss_log_filename);
}
En la función anterior, hay cuatro variables de nivel de registro. Cuando se ejecuta un programa PHP, la información de registro se puede registrar y mostrar solo cuando el nivel de registro es inferior al valor de nivel preestablecido. Por ejemplo, agregue la siguiente declaración al programa:
ss_log_set_level(INFO);
Luego, cuando se ejecuta un programa PHP, solo se puede registrar y mostrar la información de LOG de nivel de ERROR e INFORMACIÓN, y se ignora la información de nivel de DEBUG. Además, también podemos configurar el contenido de la información mostrada con las siguientes declaraciones:
ss_log(ERROR, "ERROR de nivel de prueba");
ss_log(INFO, "INFO del nivel de prueba");
ss_log(DEBUG, "nivel de prueba DEBUG");
También puede utilizar la siguiente declaración para borrar la información de LOG en cualquier momento:
ss_log_reset();
4. Función de prueba de velocidad
Para optimizar el código, necesitamos un método que pueda probar el tiempo de ejecución del código para seleccionar el código óptimo. La siguiente función puede probar el tiempo necesario para ejecutar el código:
function ss_timing_start ($nombre = predeterminado) {
$ss_timing_start_times globales;
$ss_timing_start_times[$nombre] = explotar( , microtime());
}
función ss_timing_stop ($nombre = predeterminado) {
$ss_timing_stop_times globales;
$ss_timing_stop_times[$nombre] = explotar(, microtime());
}
función ss_timing_current ($nombre = predeterminado) {
$ss_timing_start_times globales, $ss_timing_stop_times;
si (!isset($ss_timing_start_times[$nombre])) {
devolver 0;
}
si (!isset($ss_timing_stop_times[$nombre])) {
$stop_time = explotar(, microtime());
}
demás {
$stop_time = $ss_timing_stop_times[$nombre];
}
$actual = $stop_time[1] - $ss_timing_start_times[$nombre][1];
$actual += $stop_time[0] - $ss_timing_start_times[$nombre][0];
devolver $actual;
}
Ahora podemos verificar fácilmente el tiempo de ejecución de cualquier fragmento de código. Incluso podemos usar varios temporizadores al mismo tiempo. Solo necesitamos configurar diferentes parámetros como el nombre del temporizador cuando usamos las funciones anteriores.
5. Depuración y optimización de operaciones de bases de datos
Para las bases de datos, la velocidad de ejecución es crucial. Aunque muchos libros y artículos enseñan métodos para ejecutar bases de datos rápidamente, todos los métodos deben probarse en la práctica. A continuación, combinaremos la función query() en la biblioteca de funciones PHPLib y las funciones introducidas anteriormente para escribir una nueva función query(). En comparación con la función original, esta función agrega una función de monitoreo del tiempo de ejecución.
consulta de función ($Query_String, $halt_on_error = 1) {
$esto->conectar();
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->Fila = 0;
$this->Errno =mysql_errno();
$this->Error =mysql_error();
if ($halt_on_error && !$this->Query_ID) {
$this->halt("SQL no válido: ".$Query_String);
}
return $this->Query_ID;
}
2. Escriba un código hermoso
1. Separe el programa back-end del programa front-end
Al escribir un programa PHP, algunos códigos se utilizan para procesar algunas transacciones, como operar bases de datos, realizar operaciones matemáticas, etc., mientras que otros. Los códigos son solo para el procesamiento de transacciones. Se muestran los resultados, como algunos códigos PHP que utilizan la declaración echo para mostrar los resultados en formato HTML en el navegador web y aquellos códigos HTML que están directamente incrustados en el programa PHP. En primer lugar, debemos distinguir claramente entre estos dos tipos de código, llamando al primero programa en segundo plano y al segundo programa front-end.
Debido a que PHP es un lenguaje de programación integrado, es decir, todo el código PHP se puede incrustar en código HTML, lo que aporta muchas ventajas a la hora de escribir programas. Sin embargo, si las cosas van a los extremos, deben revertirse. Si mezcla código PHP y código HTML en un programa largo, hará que el programa sea complicado y desfavorable para el mantenimiento y la lectura del programa. Por lo tanto, necesitamos trasplantar el código PHP mezclado con el código HTML en estos programas tanto como sea posible, encapsular estos códigos en funciones en archivos especiales y luego usar la declaración de inclusión en el código HTML para incluir estos archivos en la ubicación adecuada. Simplemente llame a estas funciones.
Por un lado, este enfoque hace que tanto el código HTML como el código PHP sean simples y fáciles de leer. Por otro lado, debido a que el código HTML necesita actualizarse constantemente, este método de separación puede garantizar que el programa en segundo plano no se destruya. .
A diferencia de los programas front-end, los programas back-end buscan estabilidad, estructura y rara vez cambian, por lo que deben diseñarse y administrarse cuidadosamente. De hecho, vale la pena invertir mucho tiempo en el diseño de programas de escritorio. "Plante árboles ahora y disfrute de la sombra más tarde". Podrá utilizar fácilmente los programas en segundo plano que escriba ahora en futuros trabajos de diseño.
2. Uso flexible de archivos de inclusión
Como se mencionó anteriormente, los programas en segundo plano deben organizarse en una serie de archivos de inclusión. Los archivos incluidos se pueden cargar dinámicamente cuando sea necesario a través de la declaración de inclusión, o se pueden cargar automáticamente por adelantado usando la directiva auto_prepend_file en el archivo php.ini.
Si utiliza este último método, aunque obtendrá los beneficios de una vez por todas, también existen algunas deficiencias que merecen nuestra atención. El siguiente fragmento de código nos muestra cuánto tiempo lleva analizar un archivo de inclusión grande:
require(timing.inc);
ss_timing_start();
incluir(prueba.inc);
ss_timing_stop();
eco
.ss_timing_current().
?>
En el código anterior, test.inc es un archivo de inclusión de 1000 líneas. Los resultados de la ejecución muestran que se necesitan 0,6 segundos para analizar este archivo de inclusión. Para un sitio web grande, esta velocidad no es insignificante.
Otra desventaja de usar archivos de inclusión es que si ocurre un error en una declaración en un archivo, el programa PHP de todo el sitio web no podrá ejecutarse. Así que úsalo con mucho cuidado.
De hecho, con un poco de procesamiento del archivo de inclusión, el archivo de inclusión se puede analizar solo cuando sea necesario. El siguiente código hace que el archivo abc.inc se analice sólo cuando el programa lo necesita:
if (definido(__LIBA_INC)) return;
definir(__LIBA_INC, 1);
/*
* Código...
*/
?>
3. Utilice el método de programación orientado a objetos
. PHP también es un lenguaje orientado a objetos. El método de programación orientado a objetos es un método de diseño de software muy respetado por los programadores excelentes. En la programación PHP, las ventajas del lenguaje orientado a objetos se pueden aprovechar al máximo. La ventaja es encapsular objetos en la programación. En el código anterior, utilizamos un método orientado a objetos. Por ejemplo, al administrar la base de datos, encapsulamos la función query() en la clase de la base de datos, lo que facilitó enormemente la administración del código y aumentó la legibilidad del programa.
3. Persiga la velocidad del programa en lugar de la velocidad de programación
En la construcción de un sitio web, la velocidad de ejecución del programa y la velocidad de descarga de la página web son factores importantes que determinan el éxito o el fracaso. Como programador web, debes prestar más atención a la velocidad de ejecución de tu código. Varios métodos que se presentan a continuación mejoran la velocidad de ejecución del código en diversos grados.
1. Utilice código HTML incrustado en lugar de la declaración echo de PHP.
Debido a que PHP es un lenguaje de programación web integrado, el código HTML y el código PHP se pueden integrar entre sí. Sin embargo, a muchos programadores les preocupa que el uso excesivo de "" para incrustar código PHP en código HTML llame al intérprete PHP varias veces, reduciendo así la velocidad de ejecución del código PHP. Por lo tanto, preferirían usar la declaración echo de PHP para generar código HTML en lugar de. Utilice directamente código HTML. Pero la verdad es exactamente lo contrario. Cada página PHP solo llama al intérprete PHP una vez para interpretar todos los códigos PHP. Por lo tanto, incrustar códigos PHP solo cuando sea necesario y la mayoría de las veces usar códigos HTML directamente para ingresar resultados no solo no reducirá la velocidad de ejecución del programa, sino que también lo hará. Además, debido a que se reduce el análisis de las declaraciones de eco, a menudo se puede mejorar la velocidad de ejecución del código.
El siguiente fragmento de código demuestra nuestra conclusión. En este código, utilizamos la función de prueba de tiempo presentada anteriormente.
Utilice str-replace en lugar de ereg-replace
Los programadores que están acostumbrados a programar en Perl están más dispuestos a usar ereg_replace para completar el trabajo de reemplazo de cadenas, porque el uso de ereg_replace en PHP es similar al uso de coincidencia de patrones en Perl. Sin embargo, el siguiente código demuestra que usar str_replace en lugar de ereg_replace mejorará en gran medida la velocidad de ejecución del código.
Pruebe la velocidad de ejecución de str_replace y ereg_replace
//Este código prueba la velocidad de ejecución de str_replace
énfasis; ?>
para ($i=0; $i<1000; $i++) {
str_replace(i>, b>, $cadena).
}
?>
//Este código prueba la velocidad de ejecución de ereg_replace
para ($i=0; $i<1000; $i++) {
ereg_replace(<([/]*)i>, <1b>, $cadena).
}
?>
//Imprimir
la conclusión
del resultadousando el tiempo str_replace -
Es hora de usar ereg_pattern:
al ejecutar el código anterior, el resultado es:
es hora de usar str_replace - 0.089757
Es hora de usar ereg_pattern - 0.248881
A partir de los resultados de ejecución, podemos ver que usar str_replace en lugar de ereg_replace como función de reemplazo de cadenas mejora en gran medida la velocidad de ejecución del código.
3. Preste atención a las comillas de cadenas.
PHP, como muchos otros lenguajes de programación, puede utilizar comillas dobles ("") para comillas o comillas simples (). Pero en PHP, si usa comillas dobles para citar una cadena, el analizador PHP primero analizará si hay una referencia a una variable en la cadena. Si hay una variable, la reemplazará. Si se trata de comillas simples, no es tan complicado: todas las cadenas entre comillas simples se muestran directamente. Obviamente, en la programación PHP, es más rápido usar comillas simples para citar variables de cadena que comillas dobles.
4. Evite el uso de operaciones conjuntas en la base de datos.
En comparación con otros lenguajes de programación web, la función de base de datos de PHP es muy poderosa. Sin embargo, ejecutar la base de datos en PHP sigue siendo una tarea que requiere mucho tiempo y trabajo. Por lo tanto, como programador web, debe minimizar las operaciones de consulta de la base de datos y establecer índices adecuados para la base de datos. Otra cosa que vale la pena señalar es que cuando utilice PHP para operar una base de datos, trate de no utilizar operaciones conjuntas de varias tablas de datos. Aunque las operaciones conjuntas pueden mejorar la función de consulta de la base de datos, aumentan considerablemente la carga del servidor.
Para ilustrar este problema, podemos mirar el ejemplo simple a continuación.
Creamos dos tablas de datos foo y big_foo en la base de datos. En la tabla de datos foo, solo hay un campo que contiene todos los números naturales del 1 al 1000. La tabla de datos big_foo también tiene un solo campo, pero contiene todos los números naturales del 1 al 1.000.000. Entonces, en términos de tamaño, big_foo es igual a foo combinado consigo mismo.
$db->query("seleccione * de foo");
0,032273 segundos
$db->next_record();
0,00048999999999999 segundos
$db->query("insertar en valores foo (NULL)");
0,019506 segundos
$db->query("seleccione * de foo como a, foo como b");
17,280596 segundos
$db->query("select * from foo as a, foo as b donde a.id > b.id");
14,645251 segundos
$db->query("select * from foo as a, foo as b donde a.id = b.id");
0,041269 segundos
$db->query("seleccione * de big_foo");
25,393672 segundos
De los resultados de la operación anterior, podemos encontrar que la velocidad de unir dos tablas de datos con 1000 registros no es mucho más rápida que la operación separada de una tabla de datos grande con 1.000.000 de registros.
5. Preste atención a la diferencia entre incluir y requerir.
En la programación PHP, incluir () y requerir () tienen las mismas funciones, pero existen algunas diferencias en el uso. incluir () es una función de inclusión condicional, mientras que requerir () es. uno incondicional. Contiene funciones. Por ejemplo, en el siguiente ejemplo, si la variable $somgthing es verdadera, se incluirá el archivo somefile:
if($something){
incluir("algún archivo");
}
Pero no importa qué valor tome $algo, el siguiente código incluirá el archivo algúnarchivo en el archivo:
if($algo){
requerir("algún archivo");
}
El siguiente ejemplo interesante ilustra la diferencia entre estas dos funciones.
$yo = 1;
mientras ($i < 3) {
require("algún archivo.$i");
$yo++;
}
En este código, el programa incluirá el mismo archivo cada vez que realice un bucle. Obviamente esta no es la intención original del programador. Del código podemos ver que este código espera incluir diferentes archivos en cada bucle. Si deseas completar esta función, debes recurrir a la función include():
$i = 1;
mientras ($i < 3) {
include("algún archivo.$i");
$yo++;
}
6. Preste atención a la diferencia entre echo e print
Las funciones de echo e print en PHP son básicamente las mismas, pero existen diferencias sutiles entre los dos. Puede utilizar print como una función normal en código PHP. Por ejemplo, después de ejecutar el siguiente código, el valor de la variable $res será 1.
$ret = print "Hello World";
Esto significa que print se puede utilizar en algunas expresiones complejas, pero echo no. De manera similar, la declaración echo se ejecuta un poco más rápido que la declaración print en el código porque la declaración echo no requiere que se devuelva ningún valor.