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

PHP OO PHP OO Interfaces, Clases Adjuntas

Estas en el tema de PHP OO Interfaces, Clases Adjuntas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estoy colgado con el asunto de la Herencia y las interfaces.. Hasta ahora he podido entender que la herencia es una relacion de generalizacion o ...
  #1 (permalink)  
Antiguo 04/01/2013, 10:15
 
Fecha de Ingreso: julio-2012
Mensajes: 4
Antigüedad: 11 años, 9 meses
Puntos: 1
Exclamación PHP OO Interfaces, Clases Adjuntas

Estoy colgado con el asunto de la Herencia y las interfaces.. Hasta ahora he podido entender que la herencia es una relacion de generalizacion o parentesco, el hijo hereda atributos y metodos de su padre, permitiendo hacer uso de los mismos, en dependencia de la declaracion...

Mis preguntas son las siguientes:
Que ventaja se obtiene al utilizar interfaces? es solo para respetar el diseño o permite alguna ventaja como lo hace la herencia al heredar metodos y atributos?

Se puede utilizar una clase padre y una hija en un mismo archivo o clase derivada, puesto que por ejemplo yo tengo este codigo, pero si se fijan incluyo imagen y a la vez multimedia, que imagen es hijo de multimedia pero a a la vez trabajan juntos, la situacion es que no me gustaria utilizar el objeto imagen-> y obtener los metodos de su padre siendo que el elemento tratado no sea una imagen en el codigo fuente que aqui publico podrian ver a lo que me refiero... ya que aqui trato dos tipos, uno que es la imagen del libro y otro que es el libro en si, entonces utilizo la libreria imagen para tratar la portada y utilizo la libreria multimedia para tratar el libro... seria conveniente crear otra clase para manejar archivos? que conflicto tendria al usar una clase Archivos y la Clase imagen, ambas heredadas de Multimedia?

Como aplicar interfaces en mi caso!!! ayuda



Código PHP:
Ver original
  1. require_once('../lib/Servidor.php');
  2. require_once('../lib/Imagen.php');
  3. require_once('../lib/Multimedia.php');
  4. require_once('../lib/Texto.php');
  5.  
  6. class Subir_Libro{
  7.  
  8.     private $server;
  9.     private $imagen;
  10.     private $multimedia;
  11.     private $texto;
  12.  
  13.     private $datos;
  14.     private $iduser;
  15.     private $peso;
  16.     private $titulo;
  17.     private $categoria;
  18.     private $idioma;
  19.     private $descripcion;
  20.     private $formato;
  21.     private $portada;
  22.     private $portada_thumb;
  23.    
  24.     private $_archivo_libro;
  25.     private $_imagen_libro;
  26.     private $resultado;
  27.     private $enlace_libro;
  28.     private $destino_libro;
  29.    
  30.     public function __construct($archivo,$datos){
  31.         $this->datos=$datos;
  32.         $this->server=new Servidor;
  33.         $this->multimedia=new Multimedia($archivo,'libro');
  34.         $this->texto=new Texto;
  35.         $this->_archivo_libro=$this->multimedia->obtener_propiedades_archivo();
  36.         $prefijo=$this->multimedia->generar_prefijo();
  37.         $this->destino_libro="../biblioteca/_".$this->datos['id'].'/'.$prefijo."_".$this->texto->limpiar_caracteres_especiales($this->_archivo_libro['nombre']);
  38.         $this->enlace_libro=$prefijo.'_'.$this->texto->limpiar_caracteres_especiales($this->_archivo_libro['nombre']);
  39.         $this->_imagen_libro=$archivo;
  40.        
  41.     }
  42.    
  43.    
  44.     private function formatear_datos(){
  45.         $formatos_libro=array('rar','doc','docx','pdf');
  46.         $this->titulo=htmlentities(utf8_decode($this->datos['titulo']));
  47.         $this->descripcion=utf8_decode(strip_tags($this->datos['descripcion'],"<br>"));
  48.         $this->idioma=$this->datos['idioma'];
  49.         $this->categoria=$this->datos['categoria'];
  50.         $this->iduser=$this->datos['id'];
  51.         $this->formato=$this->multimedia->obtener_formato($this->_archivo_libro['nombre'],$formatos_libro);
  52.         $this->peso=$this->texto->formato_peso($this->_archivo_libro['tamano']);
  53.        
  54.     }
  55.    
  56.     private function procesar_informacion(){
  57.         $this->formatear_datos();
  58.         $formatos_libro=array('rar','doc','docx','pdf');
  59.         try{
  60.             if(!$this->multimedia->valida_formato($formatos_libro,$this->_archivo_libro['objeto'])){
  61.                 throw new Exception('{"activo":"ERROR","error":"Por favor seleccione un formato de archivo correcto para su libro"');
  62.             }
  63.             /*Subida de imagen*/
  64.             if(isset($this->_imagen_libro['imagen'])){
  65.                     $imagen_objeto=new Imagen($this->_imagen_libro);
  66.                     $archivo=$imagen_objeto->obtener_informacion_imagen(); 
  67.                     $prefijo=$this->multimedia->generar_prefijo();
  68.                     $this->portada="../biblioteca/_".$this->iduser.'/portada/'.$prefijo."_".$this->texto->limpiar_caracteres_especiales($archivo['nombre']);
  69.                     $this->portada_thumb="../biblioteca/_".$this->iduser.'/portada/thumb/'.$prefijo."_".$this->texto->limpiar_caracteres_especiales($archivo['nombre']);
  70.                     $this->multimedia->copiar_archivo($archivo['dir_temp'],$this->portada);
  71.                     $this->multimedia->copiar_archivo($archivo['dir_temp'],$this->portada_thumb);
  72.                     $imagen_objeto->set_directorio($this->portada);
  73.                     list($ancho,$alto,$tipo)=$imagen_objeto->obtener_propiedades();
  74.                     if($ancho>800 or $alto>600){
  75.                         $imagen_objeto->generar_imagen(700);
  76.                     }
  77.                     $imagen_objeto->set_directorio($this->portada_thumb);
  78.                     list($ancho,$alto,$tipo)=$imagen_objeto->obtener_propiedades();
  79.                     if($ancho>100){
  80.                         $imagen_objeto->generar_imagen(110);
  81.                     }
  82.    
  83.             }else{$this->portada="../imagenes/librod.png";}
  84.             /*subida de libro*/
  85.             $this->multimedia->mover_archivo($this->_archivo_libro['dir_temp'],$this->destino_libro);
  86.             $query='CALL biblioteca('.$this->iduser.',"'.$this->titulo.'","'.$this->descripcion.'","'.$this->enlace_libro.'","'.utf8_decode($this->portada).'","'.utf8_decode($this->portada_thumb).'","'.$this->idioma.'","'.$this->categoria.'","'.$this->formato.'","'.$this->peso.'");';
  87.             if($this->server->query($query)){
  88.                 $this->resultado='{"activo":"ACTIVO","imagen":"'.$this->portada_thumb.'","peso":"'.$this->peso.'","formato":"'.$this->formato.'","idioma":"'.$this->idioma.'","titulo":"'.$this->titulo.'"}';
  89.             }  
  90.        
  91.     }catch(Exception $e){
  92.             $this->resultado=$e->getMessage();
  93.         }
  94.        
  95.     }
  96.    
  97.     public function get_resultado(){
  98.         $this->procesar_informacion();
  99.         return $this->resultado;
  100.     }
  101.  
  102.    
  103. }
  #2 (permalink)  
Antiguo 04/01/2013, 10:39
 
Fecha de Ingreso: julio-2012
Mensajes: 4
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: PHP OO Interfaces, Clases Adjuntas

Es necesario crear metodos en las clases hijas instanciando a metodos de las clases padres? o se pueden utilizar las del padre directamente?
  #3 (permalink)  
Antiguo 04/01/2013, 19:59
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: PHP OO Interfaces, Clases Adjuntas

Los métodos se heredan (valga la redundancia), salvo que quieras especializarlo no necesitas volver a escribir los métodos solo para llamar a los del padre.

En cuanto a las interfaces, lee este tema:
http://www.forosdelweb.com/f68/ke-pa...terfaz-406672/
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Etiquetas: clases, html, interfaces, php
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 17:45.