Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Delegar repetición de código en otra función

Estas en el tema de Delegar repetición de código en otra función en el foro de PHP en Foros del Web. No se que estare haciendo mal, hay fragmentos de código que repito bastante, he intentado simplificarlo, pero pasa a no funcionar, gracias Este código funciona ...
  #1 (permalink)  
Antiguo 16/02/2015, 11:18
 
Fecha de Ingreso: enero-2008
Mensajes: 581
Antigüedad: 16 años, 11 meses
Puntos: 9
Delegar repetición de código en otra función

No se que estare haciendo mal, hay fragmentos de código que repito bastante, he intentado simplificarlo, pero pasa a no funcionar, gracias

Este código funciona
Código PHP:
    function inicio() {
        
$leer=fopen(ROOT."datos".DS.$archivo.".csv""r");
        while (
$fila fgetcsv($leer)) $filas[]=$fila;
        
fclose($leer);

        include 
ROOT.'vistas'.DS.CONTROLADOR.DS.'inicio.phtml';
    } 


Este parece que no hace nada
Código PHP:
    function csv($accion$archivo) {
        
$consulta=fopen(ROOT."datos".DS."directiva.csv""r");
        while (
$fila fgetcsv($leer)) $filas[]=$fila;    
        
fclose($consulta);
    }

    function 
inicio() {
        
csv('leer''agenda');
        
print_r($filas); //Linea 11
        
include ROOT.'vistas'.DS.CONTROLADOR.DS.'inicio.phtml';
    } 
Código:
Notice: Undefined variable: filas in C:\xampp\htdocs\controladores\directiva.php on line 11

Última edición por quico5; 16/02/2015 a las 11:56
  #2 (permalink)  
Antiguo 16/02/2015, 12:03
 
Fecha de Ingreso: enero-2008
Mensajes: 581
Antigüedad: 16 años, 11 meses
Puntos: 9
Respuesta: Delegar repetición de código en otra función

RESUELTO
Código PHP:
    function csv($accion$archivo) {
        if (
$accion=='leer'$accion='r';
        if (
$accion=='escribir'$accion='w';
        
$leer=fopen(ROOT."datos".DS.$archivo.".csv"$accion);
        while (
$fila fgetcsv($leer)) $filas[]=$fila;
        
fclose($leer);
        return 
$filas;
    }

    function 
inicio() {
        
$filas=csv('leer''directiva');
        include 
ROOT.'vistas'.DS.CONTROLADOR.DS.'inicio.phtml';
    } 

Última edición por quico5; 16/02/2015 a las 12:16
  #3 (permalink)  
Antiguo 16/02/2015, 15:23
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 3 meses
Puntos: 56
Respuesta: Delegar repetición de código en otra función

Te dire una forma de que luego puedas reutilizar codigo
Código PHP:
Ver original
  1. <?php
  2. # Constantes para los modos de tratar los archivos con fopen(), popen()
  3.  
  4. # Inicio constantes
  5.  
  6.     define('FOPEN_READ',                            'rb');
  7.     define('FOPEN_READ_WRITE',                      'r+b');
  8.     define('FOPEN_WRITE_CREATE_DESTRUCTIVE',        'wb');
  9.     define('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE',   'w+b');
  10.     define('FOPEN_WRITE_CREATE',                    'ab');
  11.     define('FOPEN_READ_WRITE_CREATE',               'a+b');
  12.     define('FOPEN_WRITE_CREATE_STRICT',             'xb');
  13.     define('FOPEN_READ_WRITE_CREATE_STRICT',        'x+b');
  14.    
  15.     define('DIR_CSV',       ROOT . 'datos' . DIRECTORY_SEPARATOR );
  16.     define('DIR_VISTAS',    ROOT . 'vistas' . DIRECTORY_SEPARATOR .
  17.                             CONTROLADOR . DIRECTORY_SEPARATOR );
  18.    
  19. # Fin constantes
  20.  
  21. # function csv
  22.  
  23.     function csv( $action , $archivo , $vista = false )
  24.     {
  25.         switch( $action )
  26.         {
  27.             case 'leer':
  28.                 $archivo = DIR_CSV . $archivo . '.csv';
  29.                 if( is_file( $archivo ) )
  30.                 {
  31.                     $handle = fopen( $archivo , FOPEN_READ );
  32.                     $result = array();
  33.                     while( $data = fgetcsv( $handle ) )
  34.                     {
  35.                         $resul[] = $data;
  36.                     }
  37.                     fclose( $handle );
  38.                     # aqui incluyo el codigo de tu funcion inicio
  39.                     $filas = $result;
  40.                     if( $vista && is_file( DIR_VISTAS . $vista ) )
  41.                     {
  42.                         $filas = $result;
  43.                         include(DIR_VISTAS . $vista);
  44.                         return;
  45.                     } else return $result;
  46.                 } else die( 'El archivo especificado no existe.' );
  47.             default:
  48.                 die( 'No esta definida la accion especificada ' . $action );
  49.         }
  50.     }
  51.  
  52. # Fin function csv
De esta forma podras crear mas acciones en la funcion aparte de leer.
Te permite usarla de la misma forma que la usabas tu pero incluye la auto carga de la vista si lo deseas.
Para usarla tiene un tercer parametro al cual se le pasa el nombre de la vista

Uso a tu modo
Código PHP:
Ver original
  1. $filas = csv('leer', 'directiva');
  2. include DIR_VISTAS . 'inicio.phtml';
Uso con autocarga de vista
Código PHP:
Ver original
  1. csv('leer' , 'directiva' , 'inicio.phtml');
__________________
http://www.roglastudios.es

Etiquetas: delegar, html
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 12:36.