Programación web con PHP
Módulo 2.3: Conceptos básicos de programación y PHP (II)
Estructuras de control y comparaciones lógicas
Si el código que programamos simplemente se ejecutara linealmente siempre de la misma manera, no conseguiríamos más que preparar algunos calculos matemáticos, teniendo que modificar el programa para realizar cualquier ajuste. Es de importancia poder conseguir que el programa realice diferentes cosas en función de diferentes opciones.
Para realizar pruebas de control que determinen en qué dirección avanzará el programa, realizaremos operaciones lógicas teniendo en cuenta sus precedencias, y utilizando paréntesis para modificarlas, con las siguientes particularidades
- Si existen dos expresiones separadas por
||
(OR), y la primera es verdadera, no se evaluará la segunda y se devuelve directamente verdadero - Si existen dos expresiones separadas por
&&
(AND), y la primera es falsa, no se evaluará la segunda, y se devuelve directamente falso -
La comparación igual
==
, y diferente!=
, no tiene en cuenta los tipos de datos entre los elementos, de forma que el entero5
y la cadena"5"
pueden considerarse iguales en una comparación. - La comparación igual estricto
===
, y diferente estricto!==
si tiene en cuenta los tipos de datos de los elementos comparados||
(OR),&&
(AND),==
,===
,!=
,!==
,<
,>
- Al hacer echo de un valor verdadero, se envía el valor 1
- Al hacer echo de un valor falso, no se envía nada (vacío)
Para controlar el flujo de ejecución del programa, podemos utilizar las siguientes estructuras de control:
if ( prueba ) { código } else { alternativa }
- Ejecuta un código si una prueba es verdadera. Opcionalmente ejecuta una alternativa si es falso
while ( prueba ) { código }
- Ejecuta un código repetidamente mientras la prueba sea verdadera, comprobandola antes de la primera ejecución
do { código } while ( prueba )
- Ejecuta un código repetidamente mientras la prueba sea verdadera, comprobandola después de la primera ejecución
for( valor inicial; incremento; prueba límite) { código }
- Ejecuta un código repetidas veces, en función del valor incial de una variable, el incremento en cada ejecución, y la prueba para permanencer en el bucle
foreach($miarray as $clave => $valor) { codigo }
- Recorre cada elemento de un array, estableciendo el valor del elemento actual en $valor, y opcionalmente su clave en $clave
switch( $variable_prueba) { case 'valor1': ..código.. break; case 'valor2': ..código.. break; default: código}
- Realiza una prueba sobre una variable, especificando el código a ejecutar según cada uno de los posibles valores especificados, y opcionalmente un código por defecto en default para el resto de los valores no especificados.
La referencia completa se incluye en: http://php.net/manual/es/language.control-structures.php
Dada su importancia, el uso correcto de las estructuras de control será desarrollado de manera extensa en las clases prácticas.
Declaración y uso de funciones básicas
Como hemos visto, PHP cuenta con un gran número de funciones predefinidas muy útiles, totalmente documentadas en su página web. Pero también es posible que definamos nuestras propias funciones. Para ello debemos utilizar la palabra clave function, seguido del nombre de la función y los parámetros que acepta entre paréntesis, y el código de la función entre corchetes.
Si dentro del código incluimos la instrucción return, en ese punto se interrumpirá la ejecución de la función, devolviendo como resultado el valor indicado en el return.
Es válido no incluir una instrucción return, o que ésta esté vacía y no se le indique ningún valor, por ejemplo en una función que realiza un print o echo de algún resultado, pero luego finaliza y no devuelve nada a quien realizó su llamada.
Las funciones deben ser definidas antes de ser utilizadas, y es preciso tener cuidado de no emplear dos veces el mismo nombre de una función para redefinirla de nuevo, ya que esto constituye un error.
function mi_suma($a, $b) {
$c = $a + $b;
return $c;
}
echo mi_suma(3, 5); //Resultado "8"
function muestra_op($a, $b) {
$c = mi_suma($a, $b);
echo $a.'+'.$b.'='.$c;
}
muestra_op(4,6); //Resultado "4+6=10"
Más información sobre funciones en: http://php.net/manual/es/language.functions.php
Inclusión de ficheros
Como hemos mencionado antes, es preciso declarar cualquier función antes de que sea utilizada. Para organizar mejor nuestro código, no es preciso que todas las funciones estén definidas en el mismo fichero.
Podemos incluir código definido en otros archivos mediante las siguientes funciones
include('miarchivo.php');
//Incluye en este punto el código definido en miarchivo.php
//Si no se encuentra el archivo, se produce un error nivel "warning"
include_once('miarchivo.php');
//Solo incluye el archivo si no ha sido incluido previamente
require('miarchivo.php');
//Incluye en este punto el código definido en miarchivo.php
//Si no se encuentra el archivo, se produce un error fatal
require_once('miarchivo.php');
//Solo incluye el archivo si no se ha incluido previamente
//Si no se encuentra el archivo, se produce un error fatal
Por lo general, siempre querremos utilizar sentencias require en lugar de sentencias include, ya que nos ofrecen mayor seguridad de que el código definido se ha incluido.
Una serie de funciones y variables del entorno nos pueden ser de utilidad para tener en cuenta la ruta del fichero a buscar:
echo __FILE__;
//Devuelve la ruta absoluta al fichero actual
//en ejecución
echo dirname(__FILE__);
//Devuelve la ruta absoluta al directorio del fichero
//actual
require(basename(__FILE__).'/miarchivo.php');
//Incluye el archivo miarchivo.php que se encuentre
//en el mismo directorio que el fichero actual
Ficheros de ejemplo de la lección en vídeo
Si quieres acceder a una copia de los ficheros de ejemplo de la lección en vídeo, los encontrarás en los siguientes enlaces:
- Ejemplo formulario inicial
ejemplo3_pre.php
: http://codepen.io/vicenteherrera/pen/YyNoJN
- Ejemplo final
ejemplo3.php
: http://codepen.io/vicenteherrera/pen/Lpxwzjini.inc.php
: http://codepen.io/vicenteherrera/pen/GprVvGform.inc.php
: http://codepen.io/vicenteherrera/pen/NGdQvJrun.inc.php
: http://codepen.io/vicenteherrera/pen/yYgmzL
Aunque este servicio está pensado para compartir ficheros HTML, CSS y JS, en este caso hemos utilizado la seeción “HTML” para compartir con vosotros el código PHP de los ejemplos.