Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Clase PHP

Estas en el tema de Clase PHP en el foro de Frameworks y PHP orientado a objetos en Foros del Web. He programado una clase que maneja las fechas, acabo de comenzar con esto de las clases y me gustaria saber si voy bien encaminado. Código ...
  #1 (permalink)  
Antiguo 13/01/2005, 08:50
Avatar de thunder-ion  
Fecha de Ingreso: diciembre-2004
Mensajes: 106
Antigüedad: 19 años, 5 meses
Puntos: 0
Clase PHP

He programado una clase que maneja las fechas, acabo de comenzar con esto de las clases y me gustaria saber si voy bien encaminado.

Código PHP:
class fecha{
    
    var 
$correccion=0# Si el servidor va con retraso.
    
var $instante_unix;
    
    function 
fecha(){
        
$this->instante_unix=time()+$this->correccion;
    }
    function 
formatear($formato,$timestamp){
        
$fecha=date($formato,$timestamp);
        
$dias_semana_en=array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
        
$dias_semana_es=array("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");
        
$fecha=str_replace($dias_semana_en,$dias_semana_es,$fecha);
        
$meses_en=array("January","February","March","April","May","June","July","August","September","October","November","December");
        
$meses_es=array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
        
$fecha=str_replace($meses_en,$meses_es,$fecha);
        return 
$fecha;
    }
    function 
dia($timestamp){
        return 
date('j',$timestamp);
    }
    function 
mes($timestamp,$formato='numero'){
        
$mes=date('n',$timestamp);
        if(
$formato=='letra'){
            switch(
$mes){
                case 
1: return 'Enero'; case 2: return 'Febrero'; case 3: return 'Marzo'; case 4: return 'Abril';
                case 
5: return 'Mayo'; case 6: return 'Junio'; case 7: return 'Julio'; case 8: return 'Agosto';
                case 
9: return 'Septiembre'; case 10: return 'Octubre'; case 11: return 'Noviembre'; case 12: return 'Diciembre';
            }
        }
        elseif(
$formato=='numero'){
            return 
$mes;
        }
    }
    function 
ano($timestamp,$formato='largo'){
        if(
$formato=='largo'){
            return 
date('Y',$timestamp);
        }
        elseif(
$formato=='corto'){
            return 
date('y',$timestamp);
        }
    }
    function 
dia_semana($formato,$dia,$mes,$ano,$timestamp=0){
        if(empty(
$timestamp)){
            
$formato=mktime(0,0,0,$mes,$dia,$ano);
        }
        else{
            
$formato=$timestamp;
        }
        
$dia_semana=date('w',$formato);
        if(
$dia_semana==0){
            
$dia_semana=7;
        }
        if(
$formato=='letra'){
            switch(
$dia_semana){
                case 
1: return 'Lunes'; case 2: return 'Martes'; case 3: return 'Miércoles';
                case 
4: return 'Jueves'; case 5: return 'Viernes'; case 6: return 'Sábado';
                case 
7: return 'Domingo';
            }
        }
        elseif(
$formato=='numero'){
            return 
$dia_semana;
        }
    }
    function 
ultimo_dia_mes($mes,$ano,$timestamp=0){
        
$ultimo_dia=28;
        if(!empty(
$timestamp)){
            
$mes=$this->mes($timestamp,'numero');
            
$ano=$this->ano($timestamp);
        }
        while(
checkdate($mes,$ultimo_dia+1,$ano)){
            
$ultimo_dia++;
        }
        return 
$ultimo_dia;
    }

¿Que cambios puedo hacer? ¿Deberia meter el nombre de los meses y de los días de la semana en un array?

Gracias
  #2 (permalink)  
Antiguo 14/01/2005, 08:25
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Yo por ahi no tengo la concepcion de como deberia ser. A mi me gusta como esta hecha. Ahora no tengo acceso a mi servidor porque lo estamos actualizando, pero ni bien tenga acceso la voy a probar.
Parece bastante interesante.
__________________
| Cabeza De Raton |
  #3 (permalink)  
Antiguo 14/01/2005, 08:47
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 11 meses
Puntos: 16
Hola,

No se, hay algo que no me "huele" bien. Uhmm, ya se. Esa clase no es OOP, es codigo prodecural metido en un class. ¿Por que no digo? La primera pista: a todas las funciones le pasas el valor timestamp. Por lo que veo, llamarias a la clase algo como:
Código PHP:
$f=new fecha();
echo 
$f->dia(time()); 
Si en lugar de una clase, lo hubiese dejado como una libreria (quitas el codigo de class y el constructor), eso mismo seria
Código PHP:
echo dia(time()); 
Yo creo que primero tienes que definir el interfaz de la clase, su forma de uso. Podrias tener una clase que se usase
Código PHP:
$f=new fecha(time());
echo 
$f->dia();
echo 
$f->ano('largo');
echo 
$f->formatear('d/m/Y');
$f2=new fecha('30/12/04');
$dias=$f->restar($f2);
echo 
$dias.' de difencia entre ".$f->formatear('dmy').' '.$f2->formatear('dmy); 
Creo que es mas natural que estar pasando a cada funcion el timestamp.

Creo que lo primero es definir el interfaz, y luego implementarlo.

saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 14/01/2005, 09:30
Avatar de thunder-ion  
Fecha de Ingreso: diciembre-2004
Mensajes: 106
Antigüedad: 19 años, 5 meses
Puntos: 0
Si, a mi tampoco me olia bien. Por eso lo puse. Acabo de empezar en serio con esto de las clases y me interesaba saber que cambios podian irle bien.

Tomo nota y cuando tengo algo más ya subo.

Lo que yo trabajo con muchos timestamps diferentes, para cambiar tendria tendria que poner?:

Código PHP:
$f->fecha($NUEVO_TIMESTAMP); 
Gracias

Última edición por thunder-ion; 14/01/2005 a las 09:37
  #5 (permalink)  
Antiguo 14/01/2005, 11:12
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 6 meses
Puntos: 69
Un consejo para la gente que está escribiendo nuevas clases.
Antes de ponerse a escribir la clase en si, abran un nuevo documento, y hagan un ejemplo de como les gustaría USAR la clase, aunque la clase no esté creada. De esta manera van a darse cuenta de los métodos que deben implementar (la interfase), luego se ve el "cómo se escriben".
Suerte.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 28/01/2005, 19:26
 
Fecha de Ingreso: diciembre-2004
Mensajes: 108
Antigüedad: 19 años, 5 meses
Puntos: 1
bueno no se mucho por que apenas estoy leyendo este lenguaje tan bueno , bueno lo sig es que como hago para llamar a una clase desde una pagina por ejemplo me explico tengo mi pagina de inicio y quiero llamar por asi decir una clase de carrito de la compra como la llamaria cual seria el procedimiento por favor si me lo explicaran con un codigo de ejemplo
  #7 (permalink)  
Antiguo 29/01/2005, 05:47
Avatar de thunder-ion  
Fecha de Ingreso: diciembre-2004
Mensajes: 106
Antigüedad: 19 años, 5 meses
Puntos: 0
Código PHP:
$objeto=new NOMBRE_CLASE;
$objeto->metodo(x,y); 
Se llamaria asi.

PD:
La clase anterior la he mejorado según los consejos de josemi, aún estoy depurando alguna cosilla, haber si en estar más claro puedo subir la "nueva versión"

Saludosss

Última edición por thunder-ion; 29/01/2005 a las 05:50
  #8 (permalink)  
Antiguo 29/01/2005, 15:37
 
Fecha de Ingreso: diciembre-2004
Mensajes: 108
Antigüedad: 19 años, 5 meses
Puntos: 1
ok gracias
  #9 (permalink)  
Antiguo 01/02/2005, 19:01
 
Fecha de Ingreso: diciembre-2004
Mensajes: 108
Antigüedad: 19 años, 5 meses
Puntos: 1
$objeto=new NOMBRE_CLASE;
$objeto->metodo(x,y);
he probado un ejemplo pequeño basado en esto pero no me funciono realmente esto que hace $objeto->metodo(x,y); y disculpen la ignorancia pero soy novato todavia
  #10 (permalink)  
Antiguo 02/02/2005, 03:29
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 11 meses
Puntos: 16
En http://www.php.net/manual/en/language.oop.php tienes los ejemplos basicos.

Salduos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 07:18.