TIPS para programar mejor en php

Iniciado por alexander1712, Octubre 24, 2012, 09:55:52 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Octubre 24, 2012, 09:55:52 PM Ultima modificación: Octubre 25, 2013, 11:20:12 PM por Expermicid

buenos días a todos los usuarios y visitantes de UnderC0de, estaba viendo un código de un usuario del foro cuando noté varios problemas referente al uso de comillas dobles, nulos y otras cosas que a continuación explicaré.

¿Cuándo usar apostrofes ('') y cuando usar comillas ("")?

Una de las primeras cosas que noté fue que la persona que desarrolló ese código, no tenía una clara idea de cuando usar comillas y cuando usar apostrofes, asi que pasaré a explicarlo:

Los apostrofes nos permiten expresar cadenas literales... ¿que quiere decir esto? que si nosotros ponemos por ejemplo

Código: php
echo '$hola';


se mostrará exactamente $hola, y no el contenido de la variable, por lo tanto, para poder poner una variable y juntarla con un texto literal sería así:

Código: php
echo 'hola'.$nombre;


ese es el uso correcto del concatenador, osea el punto, que nos permite juntar (concatenar)  el literal con una variable.




Por otra parte tenemos el uso de textos parseados, a que me refiero con esto? a las comillas. que lo que hacen es "parsear" o dicho de otra forma, reemplazar las variables por sus valores.

por ejemplo si ponemos

echo "$hola";

en vez de mostrar $hola, mostrará el valor de $hola.

en este caso para poner literales y variables sería así:

Código: php
echo "hola $nombre";


de esta forma no utilizamos el concatenador.

no es conveniente usar "hola ".$nombre porque estamos utilizando un concatenador además de decirle al interprete de php que parsee el hola, por ende se pierden recursos.

de paso, aclarar que yo uso la primera técnica (literal concatenado con punto) para así reducir el consumo mayor que tiene parsear textos.




Constantes de php

Otra cosa que noté es que la gente tiene la costumbre de utilizar '' para representar valores nulos, por ejemplo si quieren declarar una variable pero sin darle valor ponen así

Código: php
$alex = '';


lo que quiero comentarles es que en este caso pueden utilizar la constante NULL de modo que queda un poco más vistoso el código.

Código: php
$alex = NULL;


y también aclarar que es recomendable que todas las constantes esten en mayusculas, por ejemplo:

CitarTRUE
FALSE
NULL
etc.




Diferencia entre dos iguales y tripleigual

ya que estamos quiero especificar la diferencia entre poner

== y ===

si nosotros ponemos:

Código: php
if ( $roberto == 1 )


lo que verifica el if, es si es igual a uno en valor, a que me refiero? a que si la variable $roberto es igual a uno.

si nosotros ponemos:

Código: php
if ( $roberto === 1 )


no solo verificamos que sea igual a uno, sino que también sea del mismo tipo, por ejemplo:

si nosotros ponemos

Código: php
$roberto = 1;
if ($roberto == TRUE)


el if se cumple porque TRUE es lo mismo que 1, pero si nosotros ponemos

Código: php
$roberto = 1;
if ($roberto === TRUE)


la condición no se cumple, porque si bien TRUE es lo mismo que 1, el 1 que asignamos a roberto en la linea anterior al if, es de tipo INT y el TRUE es de tipo BOOLEAN.

tenga en cuenta que el distinto sería:

Código: php
!=
!==





Empty e Isset

para verificar si una variable no tiene valor normalmente ustedes ponen

Código: php
if ( $var == '' )


yo les aconcejé en esta guía de tips usar NULL por lo que pondrían:

Código: php
if ( $var == NULL )


en realidad hay una función que verifica si está vacío:

Código: php
if ( empty($var) )


como ven tiene una nomenclatura más vistosa.

No pueden aplicarle empty a una función que devuelva algún valor.
Ej:

Código: php

<?php

if(empty(ej())) {
        echo "Si\n";
}

function ej() {
        return TRUE;
}


?>


Salida:

Código: php
~/www/public$ php a.php
PHP Fatal error:  Can't use function return value in write context in /home/yoya/www/public/a.php on line 3


otro dato interesante es que si requieren verificar con if una variable que no existe o puede no existir todos sabemos que si displays errors está activado nos dará error "Warning undefined variable"

para evitar esto podemos poner

Código: php
if(isset($var) && $var==1)


esto hará que antes de verificar una variable inexistente cumple cierta condición, verificará que exista.
(tenga en cuenta que la función isset verifica la existencia de una variable)

También algo que se debe tener en cuenta, normalmente cuando trabajamos con datos que manda el usuario sea por GET o POST. Normalmente se comprueba si la cadena que llega esta vacía, tipicamente se utiliza isset o empty para hacer la comprobacion pero estos pueden dar falsos positivos.

isset, dara verdadero si la variable ha sido definida aunque no contenga ningún valor.

empty, dará verdadero si la variable ha sido definida y contiene algún valor distinto PERO si la variable contiene solo espacio en blanco la dará como valida. En este caso, hay que utilizar el consejo que nos da la misma documentacion.

Código: php
<?php

$ej = " ";

if (trim($ej) == FALSE) {

        echo 'La variable contiene algun valor';
}else {

        echo 'La variable esta vacia';
}

?>





forzar tipos

otra cosa interesante que me topé a lo largo de mi aprendizaje de php fue forzar un tipo de dato. (type casting)

por ejemplo:

Código: php
$alex = (int) 'Pedrito 1 clavo un clavito';


ese int entre parentesis obligará a guardar solo los numeros en la variable.

tambien podemos usar por ejemplo (float)

es útil si vamos a trabajar con comparación de tres iguales ( === )




Incremento y decremento

ésto es algo que a mi me ocurría cuando yo cambié de lenguaje a php, yo hacía así para sumar uno a un contador:

Código: php
$c = $c + 1;


en php eso fue cambiado por

Código: php
$c++;


y también está

Código: php
$c--;


y si quieren sumar algo a una variable (que no sea solo incrementar en uno)

Código: php
$var+=10;


eso sumará 10 al valor actual de $var

Sobre esto ++ y --. Dependiendo el lugar donde lo pongas, antes o después de la variable, tendrá un efecto diferente.

Ejemplo:
Código: php
<?php

$A = 10;
$B = 10;
echo $A++."\n";
echo ++$B."\n";
?>


Salida:

Código: php
$ php a.php
10
11


Si agregas el ++ antes de la variable, lo que quiere decir es que primero se incrementara la variable y luego se ejecuta la variable.
Si agregas el ++ después de la variable, lo que quiere decir es que primero se ejecuta la variable, luego se incrementa (conocido como preincremento y predecremento).

También otro pequeño tip, aparte de +=, puedes utilizar los demás operadores aritméticos. +=, -=, *=, /=, etc...




Operador Ternario

el Operador Ternario o if simplificado es muy útil cuando entiendes como funciona y te das cuenta en donde usarlo, la sintaxis es así:

condicion ? si se cumple : si no se cumple;

se evalúa la condición, y devuelve en caso de ser verdadera el valor a la izquierda de los dos puntos, y en caso de no cumplirse, devuelve el valor a la derecha.

ejemplo:

Código: php

echo $edad>17 ? 'usted es mayor de edad' : 'usted es menor de edad';





identación y comentarios

una cosa que siempre me parece horrorosa en los códigos es que esté mal identado.

la identación consiste en mantener un orden en el código, las tabulaciones entre la apertura de llaves de funciones, etc.

un ejemplo de mi identación:

Código: php


codigo
lalalal
mas codigo
function prueba()
  {
  código de la función
  while()
     {
       codigo de mi while
     }   
  fin del codigo de la funcion
  return 0;
  }
fin de mi código php


también es importante documentar el código con comentarios.

hay 3 tipos de comentarios

Código: php
// una linea

/*
mas de una linea
*/

# código que ya no uso


esa es mi forma de comentar, entonces arriba de cada linea del código pongo que hace con un comentario de una linea.

y al principio de mi código pongo de que trata y el autor de éste modo:

Código: php

/**
   * Nombre del proyecto: Ejemplo
   * Estado: Prototipo
   * Fecha de edición: 24/10/12
   * Autor: Alexander1712
   * Web: underc0de.org
   */


y cuando quito alguna linea de mi código, no la borro, sino que la comento con un numeral (#) delante.

Sobre los comentarios, hay otro tipos de comentarios que en realidad que se utilizan para generar documentacion automatica o para indicar como funciona el codigo, una funcion, que tipo de valor retorna, que tipo de valor recive, etc...

Que viene siendo lo mismo que lo que hace JavaDoc.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

El que yo conozco es No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

esos son los tips que yo les dejo, espero que les sirvan, un saludo! Alexander171294

Agradezco a ~Yoya~ por su colaboración con el post, e invito a quien desee agregar algún comentario sobre lo que le falta y no se me ocurrió, o que quisieran agregar (téngase en cuenta que estaba en la escuela armando el post, y simplemente a memoria, sin basarme en la documentación oficial)


Buen aporte solo unas cosas que tener en cuenta.

No pueden aplicarle empty a una función que devuelva algún valor.
Ej:
Código: php
<?php

if(empty(ej())) {
echo "Si\n";
}

function ej() {
return TRUE;
}


?>

Salida:
Código: php
~/www/public$ php a.php
PHP Fatal error:  Can't use function return value in write context in /home/yoya/www/public/a.php on line 3




También algo que se debe tener en cuenta, normalmente cuando trabajamos con datos que manda el usuario sea por GET o POST. Normalmente se comprueba si la cadena que llega esta vacía, tipicamente se utiliza isset o empty para hacer la comprobacion pero estos pueden dar falsos positivos.

isset, dara verdadero si la variable ha sido definida aunque no contenga ningún valor.

empty, dará verdadero si la variable ha sido definida y contiene algún valor distinto PERO si la variable contiene solo espacio en blanco la dará como valida. En este caso, hay que utilizar el consejo que nos da la misma documentacion.

Código: php
<?php

$ej = " ";

if (trim($ej) == FALSE) {

echo "La variable contiene algun valor\n";
}else {

echo "La variable esta vacia\n";
}

?>




Sobre lo de  forzar tipos, correctamente se llama Type casting. Es bueno saber el nombre correcto de la cosas, ya que normalmente muchas cosas que vemos en algún lenguaje.



Sobre lo de incremento y decremento, algo que muchas personas no conocen y la verdad es un buen TIPS.

Es sobre esto ++ y --. Dependiendo el lugar donde lo pongas, antes o después de la variable, tendrá un efecto diferente.

Ejemplo:
Código: php
<?php

$A = 10;
$B = 10;
echo $A++."\n";
echo ++$B."\n";
?>


Salida:
Código: php
$ php a.php
10
11


Si agregas el ++ antes de la variable, lo que quiere decir es que primero se incrementara la variable y luego se ejecuta la variable.
Si agregas el ++ después de la variable, lo que quiere decir es que primero se ejecuta la variable, luego se incrementa.

También otro pequeño tip, aparte de +=, puedes utilizar los demás operadores aritméticos. +=, -=, *=, /=, etc...



Lo de if simplificado, que estas explicando en realidad se llama Operador Ternario. Que son parte de los operadores en PHP.



Sobre los comentarios, hay otro tipos de comentarios que en realidad que se utilizan para generar documentacion automatica o para indicar como funciona el codigo, una funcion, que tipo de valor retorna, que tipo de valor recive, etc...

Que viene siendo lo mismo que lo que hace JavaDoc.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

gracias por las aclaraciones, son bien recibidas.

las agrego al tema principal.

saludo!


no solo son buenos tips, sino que estan muy bien explicados.

Te digo la verdad, me lei manuales, tutoriales, y hasta compre un "libro" en php de 300 hojas ( todo esto antes q no sabia php), y despues cuando aprendi php, me di cuenta q todo estaba mal explicado (el "libro" tenia errores de ortografica y de codigo el cual daban errores), destaco lo del "libro" porque nose quien hace un "libro" y no lo verifica como corresponde.

Suponiendo que cualquiera de aqui escriba un libro, creo q lo mirara mas de mil veces para comprobar todo.  y sobre todo cuando es una marca tan conocida como USERS.

Y estos tips son muy importantes, fijen lo de la comillas simples y dobles que parece una terrible boludes, sin embargo... muchos libros, y manuales eso lo dejan de lado, por lomenos todo lo que lei yo, lo explicaban muyy por arriba, o directamente no lo explicaban, simplemente decian que se usaba "" o ''  para imprimir en pantalla.

Saludos

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
no solo son buenos tips, sino que estan muy bien explicados.

Te digo la verdad, me lei manuales, tutoriales, y hasta compre un "libro" en php de 300 hojas ( todo esto antes q no sabia php), y despues cuando aprendi php, me di cuenta q todo estaba mal explicado (el "libro" tenia errores de ortografica y de codigo el cual daban errores), destaco lo del "libro" porque nose quien hace un "libro" y no lo verifica como corresponde.

Suponiendo que cualquiera de aqui escriba un libro, creo q lo mirara mas de mil veces para comprobar todo.  y sobre todo cuando es una marca tan conocida como USERS.

Y estos tips son muy importantes, fijen lo de la comillas simples y dobles que parece una terrible boludes, sin embargo... muchos libros, y manuales eso lo dejan de lado, por lomenos todo lo que lei yo, lo explicaban muyy por arriba, o directamente no lo explicaban, simplemente decian que se usaba "" o ''  para imprimir en pantalla.

Saludos

agradezco el cumplido y la buena onda de todos, me gustaría que entre todos hagamos una sección mejor de php, si quieren aportar algo o preguntar algo, siempre estoy dispuesto a ayudar.

y si ven algún error en alguna explicación siempre es bienvenida toda critica constructiva.

un saludo para todos!