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

Clase para calculo de edad

Estas en el tema de Clase para calculo de edad en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola como estoy realizando un proyecto para una escuela y estaba acostumbrado a programar con estructuras en php, me decidi esta vez por la POO ...
  #1 (permalink)  
Antiguo 12/06/2010, 00:29
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 13 años, 4 meses
Puntos: 1
Clase para calculo de edad

Hola como estoy realizando un proyecto para una escuela y estaba acostumbrado a programar con estructuras en php, me decidi esta vez por la POO para el proyecto sin saber nada de clase y objetos y leyendo y practicando he avanzado mucho en poco tiempo, no soy experto ni mucho menos el mejor, pero intento hacerlo lo mejor que puedo, acabo de realizar una clase para calcular la edad solo basta con ingresar la fecha de nacimiento en el formato AAAA-MM-DD, sin mas aqui la dejo para cualquiera que la pudiese necesitar, y por cierto voy a ir subiendo las clases que vaya generando junto con mi proyecto

Edad.class.php
Código PHP:
<?php
class Edad
{
    private 
$fecha_nacimiento;
    
    public function 
__construct($fecha_nacimiento)
    {
        
$this->fecha_nacimiento=$fecha_nacimiento;
    }
    
    private function 
dia()//Día de la fecha de nacimiento
    
{        
        
$fecha=explode("-",$this->fecha_nacimiento);
        
$dia=$fecha[2];
        
        return 
$dia;
    }
    private function 
mes()//Mes de la fecha de nacimiento
    
{        
        
$fecha=explode("-",$this->fecha_nacimiento);
        
$mes=$fecha[1];
        
        return 
$mes;
    }
    private function 
anio()//Año de la fecha de nacimiendo
    
{        
        
$fecha=explode("-",$this->fecha_nacimiento);
        
$anio=$fecha[0];       
        
        return 
$anio;
    }
    private function 
getmes()//Mes actual
    
{
        
$hoy=explode("-",date("Y-m-d"));        
        
$mes=$hoy[1];
        return 
$mes;                
    }
    private function 
getanio()//Año actual
    
{
        
$hoy=explode("-",date("Y-m-d"));        
        
$anio=$hoy[0];
        return 
$anio;                
    }
    private function 
getdia()//Día actual
    
{
        
$hoy=explode("-",date("Y-m-d"));        
        
$dia=$hoy[2];
        return 
$dia;                
    }
    private function 
calculo()//Calculo de la edad actual
    
{
        
$cumplidos=$this->getanio()-$this->anio();
        return 
$cumplidos;
    }
    public function 
calcular_edad()//Calculo de la edad con la codicion de que si no ha llegado a la fecha exacta de nacimiento no imprime la edad que en el año actual deberia cumplir
    
{
        
$edad=$this->calculo();
        if(
$this->getmes()>=$this->mes() && $this->getdia()>=$this->dia()){//Verifica que si el mes y dia son iguales a los de su nacimiento
            
return $edad;
        }else{
            
$edad=$edad-1;
            return 
$edad;
        }
    }
    
    public function 
__destruct()
    {
        
$this->fecha_nacimiento;
    }
}
$edad=new Edad("1985-07-22");//Ejemplo de uso
echo $edad->calcular_edad();
?>
Se aceptan comentarios y criticas para mejorarla
  #2 (permalink)  
Antiguo 12/06/2010, 07:32
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 13 años, 1 mes
Puntos: 1517
Respuesta: Clase para calculo de edad

Hace un poco de tiempo PHP tiene una clase para trabajar con fechas. Te recomiendo que la uses para este tipo de casos. Ejemplo de uso
Código PHP:
Ver original
  1. <?php
  2. $datetime1 = new DateTime('1985-07-22');
  3. $datetime2 = new DateTime();
  4. $interval = $datetime1->diff($datetime2);
  5. echo $interval->format('%y años');
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 12/06/2010, 07:46
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Clase para calculo de edad

Cita:
Iniciado por abimaelrc Ver Mensaje
Hace un poco de tiempo PHP tiene una clase para trabajar con fechas. Te recomiendo que la uses para este tipo de casos. Ejemplo de uso
Código PHP:
Ver original
  1. <?php
  2. $datetime1 = new DateTime('1985-07-22');
  3. $datetime2 = new DateTime();
  4. $interval = $datetime1->diff($datetime2);
  5. echo $interval->format('%y años');
diff es un metodo que tu tiene en otro codigo o clase, porque ya probe con lo que hiciste pero me marca el siguiente error

Fatal error: Call to undefined method DateTime::diff() in C:\AppServ\www\fechas.php on line 4
  #4 (permalink)  
Antiguo 12/06/2010, 09:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 13 años, 1 mes
Puntos: 1517
Respuesta: Clase para calculo de edad

Sí, perdón, se me olvidaba. Ese método funciona desde la versión 5.3.0 de PHP en adelante.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 12/06/2010, 10:10
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Clase para calculo de edad

Cita:
Iniciado por abimaelrc Ver Mensaje
Sí, perdón, se me olvidaba. Ese método funciona desde la versión 5.3.0 de PHP en adelante.
Ok, ya decía yo que algo andaba mal, gracias
  #6 (permalink)  
Antiguo 15/06/2010, 19:45
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 17 años, 1 mes
Puntos: 32
Respuesta: Clase para calculo de edad

Que tal Negro1985, algunas sugerencias que se me ocurren en el momento:

  • En POO debes pensar en "entidades" más reales, que existan en el mundo "real" que queremos modelar, por ejemplo, Edad en sí sería más "un dato / información", lo correcto sería englobar todo en una clase Date / Fecha
  • "obtener edad" sería en sí una acción, un método de la clase Date / Fecha
  • usa "camelcase" tanto en métodos como en atributos, por ejemplo cambia $fecha_nacimiento por fechaNacimiento, getanio() por getAnio()
  • trata de usar estándares difundidos, como el de Zend
  • Cambia el formato NombreClase.class.php por NombreClase.php
  • define claramente las acciones, tener métodos tipo "dia()" no aportan ni clarifican la acción, si son simples, puedes usar el término de get / set, como getDia(), o si quieres en castellano, obtenerDia (aunque en lo personal prefiero usar inglés que es más breve y difundido).
  • el destructor no aporta nada, elimínalo
  • usa espacios siempre antes y despues de un "="
Mis 2c
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 17/06/2010, 20:01
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Clase para calculo de edad

Cita:
Iniciado por enriqueplace Ver Mensaje
Que tal Negro1985, algunas sugerencias que se me ocurren en el momento:

  • En POO debes pensar en "entidades" más reales, que existan en el mundo "real" que queremos modelar, por ejemplo, Edad en sí sería más "un dato / información", lo correcto sería englobar todo en una clase Date / Fecha
  • "obtener edad" sería en sí una acción, un método de la clase Date / Fecha
  • usa "camelcase" tanto en métodos como en atributos, por ejemplo cambia $fecha_nacimiento por fechaNacimiento, getanio() por getAnio()
  • trata de usar estándares difundidos, como el de Zend
  • Cambia el formato NombreClase.class.php por NombreClase.php
  • define claramente las acciones, tener métodos tipo "dia()" no aportan ni clarifican la acción, si son simples, puedes usar el término de get / set, como getDia(), o si quieres en castellano, obtenerDia (aunque en lo personal prefiero usar inglés que es más breve y difundido).
  • el destructor no aporta nada, elimínalo
  • usa espacios siempre antes y despues de un "="
Mis 2c
Bien por tu info, una duda, no siempre es necesario utilizar un constructor y un destructor??
  #8 (permalink)  
Antiguo 17/06/2010, 20:09
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 17 años, 1 mes
Puntos: 32
Respuesta: Clase para calculo de edad

Que tal Negro1985

Solo deberías usarlos cuando los necesites, dejarlos vacíos, no sirve de nada. Por lo general se usa más el constructor que el destructor (estadísticamente hablando), pero también por lo general es poco probable que una clase no tenga un constructor (pero no estás obligado a hacerlo si piensas que no lo necesitas).

Hay que ver el caso, pero sí o sí, nada se hace de forma mecánica.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Etiquetas: calculo, clase, edad
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 10:45.