Foros del Web » Programando para Internet » PHP »

Pequeño ejemplo de banco (Util para iniciados)

Estas en el tema de Pequeño ejemplo de banco (Util para iniciados) en el foro de PHP en Foros del Web. Hola estoy orgulloso de presentar mi pequeño código PHP, he entendido al final como funciona y me gustaria compartirlo con la gente que pueda interesarle. ...
  #1 (permalink)  
Antiguo 28/02/2009, 14:39
 
Fecha de Ingreso: enero-2006
Ubicación: Barcelona, España
Mensajes: 126
Antigüedad: 18 años, 3 meses
Puntos: 1
Pequeño ejemplo de banco (Util para iniciados)

Hola estoy orgulloso de presentar mi pequeño código PHP, he entendido al final como funciona y me gustaria compartirlo con la gente que pueda interesarle. es una tonteria pero puede mejorarse mucho.

Código PHP:
<!-- Manual de PHP para Forosdelweb -->
<html>
<head>
   <title>Ejemplo de dinero</title>
</head>
<body>
<?php
   $dinero 
"100";  //En esta variable definimos el dinero que tenemos
   
   
switch($dinero) {
      case 
"0":   // En caso que no tengamos dinero.
         
echo "No tienes más dinero."//Nos avisa
         
echo " ¿Quieres pedir un préstamo?"//Y nos pide si queremos pedir un préstamo.
         
break;
      case (
$dinero 0):   // Si tenemos algun dinero.
         
echo "Tienes $dinero euros"// Nos informa la cantidad que tenemos...
         
echo " ¿Quieres ingresar el dinero al banco?"// nos invita a ingresar el dinero al banco.
         
break;
       }
?>
</body>
</html>
¿Alguien me ayuda a añadirle alguna función más?

Un saludo!
  #2 (permalink)  
Antiguo 28/02/2009, 17:22
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pequeño ejemplo de banco (Util para iniciados)

Interesante. Por qué usas switch? Si bien es cierto funciona, para poner el código como ejemplo deberías emplear correctamente la sintaxis del lenguaje. Un par de ifs habría sido "suficiente y adecuado":

Código php:
Ver original
  1. if($dinero > 0) {
  2.     echo 'Tienes dinero';
  3. } else {
  4.     echo 'No tienes dinero';
  5. }
Ahora, si quieres usar de todos modos switch, tal vez lo más correcto habría sido:

Código php:
Ver original
  1. switch(true) {
  2.     case ($dinero == 0):   // En caso que no tengamos dinero.
  3.         echo "No tienes más dinero."; //Nos avisa
  4.         echo " ¿Quieres pedir un préstamo?"; //Y nos pide si queremos pedir un préstamo.
  5.         break;
  6.     case ($dinero > 0):   // Si tenemos algun dinero.
  7.         echo "Tienes $dinero euros"; // Nos informa la cantidad que tenemos...
  8.         echo " ¿Quieres ingresar el dinero al banco?"; // nos invita a ingresar el dinero al banco.
  9.         break;
  10.     }
  11. }

Switch sirve para comparar el valor final de cada uno de los cases con el que le pasamos como patrón (En este caso true, y en tu ejemplo $dinero). En tu ejemplo, si $dinero vale 20, obviamente el primer case no se cumple. El segundo es una comparación que devuelve un valor booleano (true o false). En este caso devolvería true. Dado que switch hace comparaciones flexibles, 20 (int) es considerado igual (==) a true (bool). Por eso es que el contenido de ese case es ejecutado, pero no porque el patrón sea igual a la condición del case.

Pero que esto quede sólo como aclaración para los que lean este ejemplo. Así como lo pusiste es muy útil, práctico y empleado.

Gracias por compartirlo

  #3 (permalink)  
Antiguo 28/02/2009, 18:02
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Pequeño ejemplo de banco (Util para iniciados)

Y yo que pensaba que switch no soportaba ese tipo de sintaxis.
Gracias por el dato okram ;)
  #4 (permalink)  
Antiguo 28/02/2009, 18:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pequeño ejemplo de banco (Util para iniciados)

interesante caso, pienso que se debe a que se sale en el primer case que devuelva true

exactamente eso hacen las comillas de un switch/case regular

Código PHP:
switch ($foo)
{
    case 
'candy':
    break;
    
    case 
'bar':
    break;
    
    
// ...
}

// if ($foo == 'candy')
// else if ... 
de veras, yo también desconocía esta característica... genial!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 28/02/2009, 21:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Pequeño ejemplo de banco (Util para iniciados)

Es muy útil para muchas cosas, por ejemplo re-escribiendo urls:
Código php:
Ver original
  1. $query = ''; // New Query String
  2.         switch( true ) {
  3.         case ( count( $qString ) == 0 ) && ( count( $params ) == 0 ):
  4.             break;
  5.         case ( count( $params ) == 0 ):
  6.             $query = "?" . http_build_query( $qString );
  7.             break;
  8.         case ( count( $qString ) == 0 ):
  9.             $query = "?" . http_build_query( $params );
  10.             break;
  11.         default:
  12.             $newQString = array();
  13.  
  14.             foreach($qString as $variable => $value) {
  15.                 if(!array_key_exists($variable, $params)) {
  16.                     $newQString[$variable] = $value;
  17.                 }
  18.             }
  19.  
  20.             $outOriginalQString = http_build_query( $newQString );
  21.             $outNewQString = http_build_query( $params );
  22.             if( empty( $outOriginalQString ) ) {
  23.                 $query = "?" . $outNewQString;
  24.             } else {
  25.                 $query = "?" . $outOriginalQString . $outSeparator . $outNewQString;
  26.             }
  27.             break;
  28.         }

Saludos
  #6 (permalink)  
Antiguo 28/02/2009, 21:29
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pequeño ejemplo de banco (Util para iniciados)

En realidad switch tiene gran potencial a explotar. Alguna vez lo vi como parte de un script de validación de un formulario. No recuerdo dónde, pero más o menos era así, a ver que os parece:

Código php:
Ver original
  1. switch(false):
  2.     case ( !empty($_POST['nombre']) ) : // Condición que SÍ SE DEBE CUMPLIR
  3.         $error = 'Debe escribir su nombre'; // Lo que pasa si NO SE CUMPLE
  4.         break;
  5.     case ( strlen($_POST['nombre']) > 6 and strlen($_POST['nombre']) < 30 ) :
  6.         $error = 'El nombre debe tener entre 6 y 30 caracteres';
  7.         break;
  8.     case ( email_valido($_POST['email']) ) :
  9.         $error = 'El email ingresado es incorrecto';
  10.         break;
  11. endswitch;

Tenía el inconveniente de que mostraba un error por vez, pero metiéndolo en una función y usando banderas quedaba un código bastante limpio, ordenado, fácil de leer y modificar. Me encantó la lógica empleada. Nada de códigos rebuscados, sólo pura imaginación

  #7 (permalink)  
Antiguo 28/02/2009, 23:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Pequeño ejemplo de banco (Util para iniciados)

A lo mejor se podría jugar sin el break; así sigues ejecutando las opciones de los cases y puedes agregar errores, no lo he probado pero supongo podría funcionar.

Saludos
  #8 (permalink)  
Antiguo 01/03/2009, 07:26
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pequeño ejemplo de banco (Util para iniciados)

Yo también pensé que iría por allí, pero el problema es que si no hay break;, los bloques de código se seguirian ejecutando independientemente del case.

Recuerdo que lo metían en una función que ejecutaba un ciclo en base a los elementos del formulario, e iba creando banderas para saltar los elementos ya verificados en cada ciclo. Tal vez suena un poco complejo y muchos dirán que hay formas más sencillas (y las hay), pero, como ya dije, el resultado final era un código MUY ordenado y legible.

Si no me equivoco, vBulletin en su clase para manejar los BBCodes también hace uso del switch de una manera muy interesante

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




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