Foros del Web » Programando para Internet » PHP »

[APORTE] Guía y comentarios para evitar errores al escribir código

Estas en el tema de [APORTE] Guía y comentarios para evitar errores al escribir código en el foro de PHP en Foros del Web. Cada día veo que en este foro, no dejan de repetirse los post con errores básicos de PHP tales como sintaxis, asignación, etc. Las preguntas ...
  #1 (permalink)  
Antiguo 14/04/2012, 02:00
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 8 años, 10 meses
Puntos: 331
[APORTE] Guía y comentarios para evitar errores al escribir código

Cada día veo que en este foro, no dejan de repetirse los post con errores básicos de PHP tales como sintaxis, asignación, etc.
Las preguntas se multiplican con comentarios tales como "no me funciona y no sé por qué", "no hace nada", "antes funcionaba y ahora no", "no he tocado nada", etc.
Para ver si es posible evitar todos estos post e idealmente para ver si se puede ayudar a alguien a escribir mejor código, os dejo una mini guía de debuging y tips para evitar errores básicos. El orden de los puntos no tiene realmente ninguna relación, todos son igualmente prioritarios. Asimismo, una explicación extensiva de cada punto no es posible en este documento. Esta no pretende ser la “Guía definitiva” así que espero que otros foreros se animen a extenderla y agradecemos de antemando a todos aquellos que la lean y la apliquen lo antes posible junto con las normas y consejos del foro para postear, saludos.

Algunas consideraciones:

A. No hay manera de evitar los errores, pero se pueden minimizar y preveer siguiendo algunas líneas como las siguientes.

B. Para solucionar problemas con llamadas a funciones y classes propias del lenguage, el manual de PHP es la mejor opción. Una simple mirada a la definición de las funciones sirve para conocer parámetros, tipos, resultados e incluso posibles bugs.

C. Para librerías de terceros consulta siempre la documentación de los desarrolladores. Nadie mejor que ellos para saber cómo funciona, si no está debidamente documentada, busca soporte. Si no lo hay, plantéate la opción de sustituir ese software por otro.

D. Para API's tales como Google, Facebook, etc., busca en los foros especializados. Mucha gente antes que tú ha pasado por los mismos problemas. A su vez, muchos otros programadores jamás han tocado estas APIs y pierdes el tiempo en el sitio equivocado.

E. Aún cuando seas un aprendiz en el lenguage, copiar y pegar código “para salir del paso” no es una buena idea. Los posibles errores y bugs dentro de ese código te llevarán a nuevos y más complejos errores muy difíciles de detectar. Los que recurren al foro para buscar soluciones para el trabajo, la universidad, etc. deben saber que cualquier problema con el código obtenido saldrá a la luz tarde o temprano, y por lo general, estas cosas vuelven en el momento menos oportuno.

F. La utilización de Frameworks y librerías de terceros es definitivamente una opción a la hora de desarrollar y minimizar los errores pero cada caso se debe analizar individualmente.

G. Por último: NO HAY SUSTITUTO PARA EL CONOCIMIENTO Y LA EXPERIENCIA. HAY QUE ESTUDIAR, HAY QUE LEER, HAY QUE TRABAJAR porque como decían los chinos, "Es más fácil saber como se hace una cosa que hacerla."

------------------------------------------------------------------------ La Guía:

0. ERROR_REPORTING,
en desarrollo, trabajar siempre con

Código PHP:
Ver original
  1. <?php
  2. error_reporting(E_ALL); //todos los errores
  3. ini_set('display_errors', 1); //mostrar los errores
  4. ?>

Así se detectan TODOS los errores y se pueden solucionar el instante. No se debe seguir escribiendo código cuando existen variables indefinidas, índices no declarados, etc...
En producción, logear los errores en archivos pero no mostrarlos en el navegador.
Refactorea el código hasta que no quede ni un sólo mensaje del compilador.
Pregunta: para qué tengo que solucionar todos los errores si el programa funciona igual?? Para no “apilar” errores, para mantener la calidad y asegurar el funcionamiento actual y futuro.
http://de3.php.net/manual/es/functio...-reporting.php

1. NO usar el operador @ para suprimir errores a no ser en circunstancias muy particulares (este tema se puede extender más adelante). Por norma, no hay que suprimir los errores generados en el código sino solucionarlos, esto nos lleva de nuevo a 0.
Pregunta: pero si quito la arroba el programa no funciona u obtengo mensajes de error, que hago??? Empieza a leer desde el punto 0 nuevamente: http://www.php.net/manual/es/languag...rorcontrol.php

2. Aplicar "Coding Standard" o formato de código: se trata de escribir el código siguiendo unas normas de formato, indentación, comentarios, etc, para que sea más fácil de leer y entender por todos. No hay un único standard pero se ha hablado largamente sobre el tema. Empieza por adoptar UNO, luego puedes cambiar cuando te dé la gana. Personalmente no tengo preferencias pero recomiendo este: http://pear.php.net/manual/en/standards.php
Asimismo CUANDO POSTEES EN EL FORO utiliza las etiquetas de formato.
Pregunta: pero si trabajo yo solo en mi proyecto, tengo que adoptar un formato??? Desde el momento que posteas en el foro ya no trabajas solo en tu proyecto...

3. Asignación y comparación: al escribir una instrucción de comparación, escribe primero el valor, luego la variable:

ESTO NO:
Código PHP:
Ver original
  1. <?php if($var == false){} ?>
ESTO SI:
Código PHP:
Ver original
  1. <?php if(false == $var){} ?>
El motivo es que es muy fácil equivocar la comparación (==) con la asignación (=) y el resultado es incorrecto. De la manera descrita, ante un error por parte del programador, PHP dará un error de sintaxis y el fallo se puede detectar en el momento.

4. Comprobar los recursos externos: recursos externos son todos aquellos que están fuera de PHP mismo, tales como conexiones de bases de datos, archivos, streams, etc. Hay que comprobar siempre la validez de los recursos y aprovechar las funciones de error para obtener valiosa información de debugging:

ESTO NO:
Código PHP:
Ver original
  1. <?php mysql_query($sql); ?>

ESTO SI:
Código PHP:
Ver original
  1. <?php if(!mysql_query($sql)) die (mysql_error()); ?>

De esta manera el error se detecta al instante y además, se puede ver el mensaje concreto. Casi todas los recursos tienen funciones asociadas para ver los errores.
Pregunta: pero si hago esto tengo que agregar un montón de lineas de código, es realmente necesario??? Claro que no, sólo si quieres un software de calidad y evitar 5000 post en forosdelweb...

5. Usar el operador ternario cuando sea posible: es una versión abreviada de if para casos concretos:

ESTO NO:
Código PHP:
Ver original
  1. <?php
  2. if($pais == "ARG")
  3. {
  4. $destino = "google.com.ar";
  5. }
  6. else
  7. {
  8. $destino = "google.com";
  9. }
  10. ?>

ESTO SI:
Código PHP:
Ver original
  1. <?php
  2. $destino = ($pais == 'ARG'?'google.com.ar':'google.com'); //se puede escribir de otras maneras
  3. ?>
Se trata unicamente de reducir las lineas de código y por tanto las posibilidades de error.http://de3.php.net/manual/es/languag...comparison.php

6. Existen desde luego herramientas que ayudan con el debuging pero su uso y configuración quedan fuera del ámbito de este artículo. En cualquier caso siempre son recomendables. Hay que decir que todas implican un cierto proceso de aprendizaje, sobre todo para los que han aprendido a programar con PHP y no conocen otros lenguajes como C o Java. Siempre puedes utilizar la funciones nativas del lenguage que ayudan mucho: http://de3.php.net/manual/es/functio...-backtrace.php

7. Utiliza funciones como print_r() y var_dump()
(mejor aún) para ver qué contienen las variables en la ejecución de un script. Si este es tu script:

Código PHP:
Ver original
  1. <?php
  2. if($a)
  3. {
  4.     echo 'a es true y estoy aquí';
  5. }
  6. else {
  7.     die('A es false, exit()');
  8. }
  9. ?>
y siempre obtienes el output 'A es false, exit()' es porque $a es false, no sigas analizando la lógica sin comprobar el valor $a.
Pregunta: por qué $a es siempre false??? ESO ES LO QUE TIENES QUE AVERIGUAR.


8. Aunque PHP es un lenguaje muy permisivo a la hora de manejar variables, declara siempre las variables antes de utilizarlas. Además de ser más elegante, te ahorra mensajes de Warning y soluciona eventuales problemas de seguridad en versiones antiguas de PHP.
ESTO NO
Código PHP:
Ver original
  1. <?php
  2. $array[] = 'Hola';
  3. $array[] = 'Chau';
  4. ?>
ESTO SI:
Código PHP:
Ver original
  1. <?php
  2. $array = array();
  3. $array[] = 'Hola';
  4. $array[] = 'Chau';
  5. ?>
http://de3.php.net/manual/es/ref.var.php

9. Hacer caso los mensajes de error de PHP:
no busques más problemas e inicialmente confía en los mensajes del compilador:
Código PHP:
Ver original
  1. Undefined variable $algo on line 30
significa exactamente eso, no preguntes por qué tienes ese error: lo tienes porque la variables está indefinida.
Pregunta: Por qué la variable está indefinida??? ESO ES LO QUE TIENES QUE AVERIGUAR.
Utiliza Google translator ni no entiendes inglés: http://translate.google.com/
Error reporting: http://de3.php.net/manual/es/functio...-reporting.php

10. Siguiendo con el punto 9 y extendiendo las consideraciones iniciales, busca la información en la fuente y de autoridades. La información proveniente de fuentes no especializadas puede llevarte a nuevos errores y te aleja del problema inicial. La documentación especializada puede ser difícil de digerir al principio pero pronto aprendes y puedes sacarle provecho. Hago notar que no se trata de sobrevalorar o descalificar a nadie, simplemente buscamos una solución a un problema determinado.
FUENTES VALIDAS: php.net, páginas oficiales, pear.com, zend.com
FUENTES SOSPECHOSAS: tu cuñado, la piba que trabaja en la panadería, el profesor de música de la escuela.

Espero que a alguien le sirva, saludos y hasta pronto
__________________
Fere libenter homines, id quod volunt, credunt.
  #2 (permalink)  
Antiguo 14/04/2012, 05:16
 
Fecha de Ingreso: marzo-2012
Ubicación: España
Mensajes: 32
Antigüedad: 7 años, 4 meses
Puntos: 2
Respuesta: [APORTE] Guía y comentarios para evitar errores al escribir código

Está muy bueno esto!! Servirá bastante!! Un saludo!!
  #3 (permalink)  
Antiguo 25/04/2012, 07:21
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 10 años, 5 meses
Puntos: 89
Información Fe de errata: [APORTE] Guía y comentarios para evitar errores al escribir código

Fe de errata

Cito punto 3

Cita:
3. Asignación y comparación: al escribir una instrucción de comparación, escribe primero el valor, luego la variable:

ESTO NO:
Código PHP:
Ver original
  1. <?php if($var == false){} ?>
ESTO SI:

Código PHP:
Ver original
  1. <?php if(false == $var){} ?>
Error en punto 5

CITO:
Cita:
Código PHP:
Ver original
  1. <?php
  2. $destino = ($pais == 'ARG'?'google.com.ar':'google.com'); //se puede escribir de otras maneras
  3. ?>
Correccion:
Código PHP:
Ver original
  1. <?php
  2. $destino = ('ARG' == $pais )?'google.com.ar':'google.com'; //se puede escribir de otras maneras
  3. ?>

Me gusto el aporte, detalles que aprendi.
Suerte!
__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 25/04/2012, 09:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 1 mes
Puntos: 2134
Respuesta: [APORTE] Guía y comentarios para evitar errores al escribir código

Las comparaciones pueden ser de ambos lados, es igual para el interprete de PHP, y es lo mismo:
Código PHP:
Ver original
  1. if (false == $var)
  2. //a
  3. if ($var == $false)

Es cuestión del estilo del programador y de como haga sus comparaciones.

Saludos.
  #5 (permalink)  
Antiguo 25/04/2012, 17:01
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 10 años, 5 meses
Puntos: 89
Respuesta: [APORTE] Guía y comentarios para evitar errores al escribir código

Cita:
Iniciado por GatorV Ver Mensaje
Las comparaciones pueden ser de ambos lados, es igual para el interprete de PHP, y es lo mismo:
Código PHP:
Ver original
  1. if (false == $var)
  2. //a
  3. if ($var == $false)

Es cuestión del estilo del programador y de como haga sus comparaciones.

Saludos.
Si GatorV, eso se entiende, pero lo que quiere decir repara2, los Juniors como nosotros, en un codigo largo largo... hay veces que perdemos el valor de una variable, y posteamos preguntas en el foro, o nos rompemos la cabeza 2 horas, buscando el error, y el error es tan simple como este:
A.
Código PHP:
if($var == false){}
if(
$var false){}// ERROR 
Pero si nos acostumbramos ponerlo de esta manera:

B.
Código PHP:
if( false == $var){}
if( 
false $var){}// ERROR 
PHP nos alertara del error, y la solucion no nos retrasara mas de unos segundos

Si bien no me gusta, por como se lee:

A. : Es $var igual a false.
B. : Es false igual a $var.

Ya que me interesa el contenido de $var.

Es un tema para trolear xD
__________________
Mono programando!
twitter.com/eguimariano
  #6 (permalink)  
Antiguo 25/04/2012, 20:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 1 mes
Puntos: 2134
Respuesta: [APORTE] Guía y comentarios para evitar errores al escribir código

Claro es mucho mejor para encontrar el error, pero a lo que voy es ¿porque indicas que es error?.

Saludos.
  #7 (permalink)  
Antiguo 26/04/2012, 05:28
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 10 años, 5 meses
Puntos: 89
Respuesta: [APORTE] Guía y comentarios para evitar errores al escribir código


Si te referis al fe de errata:

Por que repara2, primero nos aconseja porner la condicion de una manera y despues la pone de otro
__________________
Mono programando!
twitter.com/eguimariano
  #8 (permalink)  
Antiguo 26/04/2012, 09:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 1 mes
Puntos: 2134
Respuesta: [APORTE] Guía y comentarios para evitar errores al escribir código

Oh, es muy cierto jeje, como te digo es algo muy para debatir y cada uno tiene sus puntos de vista, pero es correcto el planteamiento

Etiquetas: comentarios, errores, mysql, sql, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 7 personas




La zona horaria es GMT -6. Ahora son las 07:13.