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

duda con clases Abstractas y ZF

Estas en el tema de duda con clases Abstractas y ZF en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Tengo una duda quizás puede ser tonta pero he tratado de entenderlo y aceptarlo, según he leído en libros y artículos en la web ...
  #1 (permalink)  
Antiguo 15/05/2010, 17:27
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Pregunta duda con clases Abstractas y ZF

Hola

Tengo una duda quizás puede ser tonta pero he tratado de entenderlo y aceptarlo, según he leído en libros y artículos en la web las clases abstractas e interfaces no se pueden instanciar, bueno teniendo esto en cuenta por que en ZF usan por ejemplo la instrucción
Código PHP:
Ver original
  1. if (!$request instanceof Zend_Controller_Request_Abstract))
el operador "instanceof" compara si el objeto es una instancia de una clase determinada (una clase Abstracta). como compara una objeto con una clase que no puede crear objetos.

Saludos y espero sus comentarios, quizás este medio bloqueado y me enrede con conceptos.
  #2 (permalink)  
Antiguo 16/05/2010, 12:23
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años, 6 meses
Puntos: 32
Respuesta: duda con clases Abstractas y ZF

Que tal Fenris,

Es correcto, no puedes instanciar una clase abstracta ni una interfaz (ya que las interfaces son eso, no son clases), pero lo que ahí pregunta y es correcto, si son instancias de "determinado tipo", y esto ocurre cuando la clase que estás preguntando "hereda" de la clase abstracta.

Si clase Persona es abstracta, tú puedes preguntar si Cliente que hereda de Persona es una instancia de tipo Persona.

De todas formas preguntar de que tipo son las instancias no es una práctica recomendable ya que rompen el polimorfismo.
(solo en muy contadas excepciones son recomentables, como se puede ver en el código interno de un framework, etc).

Por más información buscar sobre el principio de Liskov

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #3 (permalink)  
Antiguo 17/05/2010, 08:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: duda con clases Abstractas y ZF

Adicional a lo que dice @enriqueplace, la idea es que tu puedas comprobar que una clase hereda, o implementa una interfaz para que puedas trabajar con ella y así garantizar una "firma de comportamiento".

Supon que tienes tu clase Persona, y una interfaz que se llame Asalariado, la idea es que los que implementen Asalariado tengan un método getSalario() para poder contar. Ahora supongamos tienes una clase Contabilidad, esta clase por diseño solo acepta personas Asalariadas, pero como distingues si lo que le pasas es una Persona, o una persona Asalariada? Pues puedes usar typehinting:
Código PHP:
Ver original
  1. public function agregaPersona(Asalariada $Persona);

O comprobar dentro de tu función:
Código PHP:
Ver original
  1. if (!($Persona instanceof Asalariada)) {
  2.        throw new Exception('Solo se permite agregar personas Asalariadas');
  3. }

Espero con esto despejarte más tus dudas.

Saludos.

Etiquetas: clases
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 13:19.