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

PHP OO Interfaces de objetos, duda sobre argumentos

Estas en el tema de Interfaces de objetos, duda sobre argumentos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola alguien me podria decir que son los argumentos Baz y Foo de los metodos Baz y Foo? porque por lo que veo no son ...
  #1 (permalink)  
Antiguo 22/09/2012, 20:29
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 41
Antigüedad: 12 años, 10 meses
Puntos: 2
Interfaces de objetos, duda sobre argumentos

Hola alguien me podria decir que son los argumentos Baz y Foo de los metodos Baz y Foo? porque por lo que veo no son objetos, interfaces ni arrays...

<?php
interface a
{
public function foo();
}

interface b extends a // la interfaz al igual que una clase comun se puede extender
{
public function baz(Baz $baz);
}

// Ésto sí funcionará
class c implements b
{
public function foo()
{
}

public function baz(Baz $baz)
{
}
}

// Ésto no funcionará y resultará en un error fatal (es lo que dice el manual que estoy leyendo)
class d implements b
{
public function foo()
{
}

public function baz(Foo $foo)
{
}
}
?>
  #2 (permalink)  
Antiguo 23/09/2012, 09:19
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Interfaces de objetos, duda sobre argumentos

Código PHP:
Ver original
  1. interface b extends a // la interfaz al igual que una clase comun se puede extender
  2. {
  3.     public function baz(Baz $baz);
  4. }

estas declarando en la interface que el método baz espera como argumento un objeto del tipo Baz (imagino que tendras declarada una clase Baz), cuando haces la declaración en la clase

Código PHP:
Ver original
  1. // Ésto sí funcionará
  2. class c implements b
  3. {
  4.     public function foo()
  5.     {
  6.     }
  7.  
  8.     public function baz(Baz $baz)
  9.     {
  10.     }
  11. }
  12.  
  13. // Ésto no funcionará y resultará en un error fatal (es lo que dice el manual que estoy leyendo)
  14. class d implements b
  15. {
  16.     public function foo()
  17.     {
  18.     }
  19.  
  20.     public function baz(Foo $foo)
  21.     {
  22.     }
  23. }

la primera funciona porque esta cumpliendo con lo establecido en la interface, en la declaración el método espera su objeto del tipo Baz, en la segunda rompes el contrato establecido, ya que en no estas haciendo la implementación de lo indicado en la interface

Código PHP:
Ver original
  1. public function baz(Foo $foo)
  2. // es diferente de
  3. public function baz(Baz $baz);

saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 23/09/2012, 10:34
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 41
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Interfaces de objetos, duda sobre argumentos

gracias carlos yo pense lo mismo habra que hacer una clase que se llame Baz lo que me parece raro que no este en el ejemplo porque lo saque del manual oficial de php, php.net, y ya probe creando la clase Baz asi:

class Baz implements b
{

public function foo()
{
}

public function baz(Baz $baz)
{
echo 'prueba';
}
}


$objbaz = new Baz();
$objC = new c();
$objC -> baz($objbaz);

y esto me da como error que el argumento pasado a Baz::baz() debe ser una instancia de Baz y por eso no se pudo obtener. y es una instancia de Baz porque yo estoy haciendo $objbaz = new Baz(); ...que me faltara o donde estara el error? gracias de nuevo carlos

Etiquetas: argumentos, interfaces, objetos
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 05:23.