Ir al contenido principal

Aprendiendo PHP - Nociones básicas (III)

Con este artículo terminamos la parte de "Nociones Básicas" de PHP:
  • Estructuras de control; break, continue y goto
  • Cómo cargar ficheros externos


ESTRUCTURAS DE CONTROL

Condicionales

if ($a == 13) {

   // código

elseif ($a == 27) {

   // código

else {

   // código

}

switch ($a) {

case 1:

   // código

break; // Sin el break, se ejecutarían los bloques siguientes

case 2:

   // código

break;

default:

   // código

}

Iterativas

while ($i < 13) {

   $i++;

}

do {

   $i++;

} while ($i < 13);

for ($i = 0; $i < 13; $i++) {

   // código

}

// foreach para recorrer arrays

$colores = array ('Rojo','Verde','Amarillo');

foreach ($colores as $color) {

   echo "$color ";

} // Se muestra Rojo Verde Amarillo

$colores = array ('Rojo' => 'P','Verde' => 'S',

                  'Amarillo' => 'C');

foreach ($colores as $color => $accion) {

   echo "$color: $accion; ";

} // Se muestra Rojo: P; Verde: S; Amarillo: C;

Ejemplo: Tabla de multiplicar del 7. Se mostrarán los 3 primeros valores.
<?php
   define(MAX,3);
   define(TABLA, 7);
       // ejemplo con while
   $i = 1;
   while ($i <= MAX) {
   printf("%d * %d = %d; ", TABLA, $i, TABLA*$i);
   $i++;
 }
   // ejemplo con for
   for ($i = 1; $i <= MAX; $i++) {
      printf("%d * %d = %d; ", TABLA, $i, TABLA*$i);
   }
   // Tanto el while como el for muestran 
   // 7 * 1 = 7; 7 * 2 = 14; 7   * 3 = 21;
?>
Se para la ejecución de una estructura iterativa con break
<?php
   $i = 0;
   while ($i < 13) {
      $i++;
      if ($i == 3) break;
   }
   echo $i; // 3
?>
Para terminar una iteración y comenzar la siguiente, se utiliza continue
<?php
   $i = 0;
   while ($i < 6) {
       $i++;
       if ($i == 3 || $i == 5) continue;
       echo $i;
   } // La salida es 1246
?>
Con PHP 5.3 se incluye la sentencia goto, que sirve para saltar a otra sección del programa, haciendo uso de etiquetas.
<?php
   goto dos;
   echo 1;
   dos:
   echo 2;
   // La salida de este programa es 2
?>
PHP proporciona 4 maneras de cargar ficheros externos: include(), include_once(), require() y require_once().


Fichero var.php

<?php

   $user = 'Ana';

?>

Fichero index.php

<?php

   include_once 'var.php';

   echo "Hola $user"; // “Hola Ana”

?>

Si el fichero que se intenta cargar no existe:
  • require() muestra un error fatal y detiene la ejecución:
             Fatal error: require() [function.require]: Failed opening required 'var2.php'
  • include() muestra un warning, pero no detiene la ejecución.
             Warning: include_once(var2.php) [function.include-once]: failed to open stream
Se recomienda utilizar include_once y require_once porque éstos comprueban si el fichero ya ha sido cargado antes de hacerlo. Si ya se cargó, no lo vuelven a hacer. Esto mejora el rendimiento y ahorra recursos.
Veamos con un ejemplo la diferencia de utilizar include e include_once al cargar el mismo fichero.


Fichero var.php

<?php

   $num +=1;

?>

Fichero index.php (utilizando include)

<?php

   include 'var.php';

   echo $num; // Muestra 1

   include 'var.php';

   echo $num; // Muestra 2

?>

Fichero index.php (include_once)

<?php

   include_once 'var.php';

   echo $num; // Muestra 1

   include_once 'var.php';

   echo $num; // Muestra 1

?>

Se pueden omitir los paréntesis en include(), include_once(), require() y require_once() porque no son realmente una función, son constructores del lenguaje.
EJERCICIOS

1) ¿Cuál es el valor final de $i?
<?php
   $i = 1;
   for (;;) {
      if ($i > 13) break;
      $i++;
   }
?>
a) Hay un error de sintaxis
b) 12
c) 13
d) 14

2) Al ejecutar el siguiente código ¿Qué valor tendrá el array $a?
<?php
   $a = array("rojo","verde");
   foreach ($a as $key => $valor) {
      if ($valor == "verde") $valor="rojo";
   }
?>
a) array("rojo","rojo");
b) array("verde","verde");
c) array("rojo","verde");
d) array("verde","rojo");

3) ¿Qué valor tendrá $i al finalizar la ejecución del siguiente código?
<?php
   $i = 0;
   while ($i < 13) {
      goto etiq;
      $i++;
   }
   $i++;
   etiq:
   --$i;
?>
a) 0
b) -1
c) 1
d) 2

4) ¿Qué se mostrará por pantalla?
<?php
   $i = 2;
   switch ($i) {
   case 1:
      echo 'uno ';
      break;
   case 2:
      echo 'dos ';
   case 3:
      echo 'tres ';
   default:
      echo 'default ';
   }
?>
a) dos
b) dos tres
c) dos tres default
d) Hay errores de sintaxis

5) ¿Qué mostrará el siguiente código?
<?php
   if (true)
   if (false)
   echo 'rojo';
   else
   echo 'verde';
?>
a) Hay errores de sintaxis
b) verde
c) rojo
d) No se muestra nada
e) rojo verde

6) ¿Cuál es el valor final de $i y $j?
<?php
   $j = 2;
   for ($i=0; $i<13; $i++) {
      $j++;
   }
?>
a) i: 13; j: 14
b) i: 12; j: 14
c) i: 13; j: 15
d) i: 12; j: 15

7) Escribe un programa que a partir del 1 al 5, devuelva su número romano correspondiente. Crea un fichero .php donde almacenes la variable con el valor que quieras del 1 al 5 e inclúyelo en el fichero principal.

Comentarios

Entradas populares de este blog

Leer un fichero properties con java.util.Properties

Los ficheros .properties son simples ficheros de texto que se suelen utilizar para guardar parámetros de configuración, en forma de pares clave-valor. Ejemplo de fichero: configuration.properties #User parameters user.name=Ana user.language=spanish Si estamos usando Java, podemos utilizar la clase java.util.Properties para leer los parámetros de este fichero: private static final String USER_NAME = "user.name"; private static final String USER_LANGUAGE = "user.language"; public void showProperties() throws Exception { Properties p = new Properties(); InputStream is = App.class.getResourceAsStream("/configuration.properties"); p.load(is); is.close(); String userName = p.getProperty(USER_NAME); String userCountry = p.getProperty(USER_LANGUAGE); System.out.println("userName: "+userName); System.out.println("userLanguage: "+userCountry); } Después de ejecutar este método, obtendríamos la siguiente salida: ...

JSF 2.0: Managed Beans (III)

Anteriormente ya hemos visto que cuando se declara un bean, tenemos que darle un scope: application, session, view, request, none. Un scope es un mapeo entre nombres y objetos que se almacena durante un determinado periodo de tiempo. En este post vamos a explicar cada uno de ellos. Si declaramos el bean desde el fichero faces-config.xml, indicamos el scope en <managed-bean-scope> y si queremos hacerlo con anotaciones, utilizaremos @{Application,Session,View,Request,None}Scoped Application Con este scope, se guarda la información durante toda la vida de la aplicación web, independientemente de todas las peticiones y sesiones que se realicen. Este bean se instancia con la primera petición a la aplicación y desaparece cuando la aplicación web se elimina del servidor. Si queremos que el bean se instancie antes de que se muestre la primera página de la aplicación, usamos la propiedad eager a true. @ManagedBean(eager=true) ó <managed-bean eager="true"> Session...

JSF 2.0: Message bundles

Los message bundles son ficheros .properties que guardan mensajes del tipo clave=valor. Si centralizamos todos los mensajes de nuestra aplicación en estos ficheros, es más fácil poder localizarlos si queremos realizar algún cambio y también nos ayuda para la internacionalización de la aplicación. Ejemplo: messages.properties (en src/java/com/examples) con dos mensajes name=Tu nombre: age=Tu edad: ¿Cómo los declaramos? 1) En cada página JSF donde lo necesitemos <f:loadBundle basename="com.examples.messages" var="msgs"/> 2) De manera global en faces-config.xml <application>      <resource-bundle>           <base-name>com.examples.messages</base-name>           <var>msg</var>      </resource-bundle> </application> Esta opción es más eficiente ya que sólo crea el bundle una v...