Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] [POO] namespaces e interfaces, duda como hacerlo.

Estas en el tema de [POO] namespaces e interfaces, duda como hacerlo. en el foro de PHP en Foros del Web. Buenas, estoy pengádome con la poo y el uso de "namespace" y "use". A ver si alguien me puede aclarar como hacer bien esto, que ...
  #1 (permalink)  
Antiguo 31/03/2015, 05:10
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 18 años, 3 meses
Puntos: 0
[POO] namespaces e interfaces, duda como hacerlo.

Buenas, estoy pengádome con la poo y el uso de "namespace" y "use".

A ver si alguien me puede aclarar como hacer bien esto, que lo mismo me estoy dando de golpe contra una pared y no lo veo.

Quiero llamar a una clase llamada saludo, que implementa una interface llamada acción, cada elemento esta en su propio archivo.

clase.class.php

Código PHP:
<?php
namespace accion 
{

interface 
accion
{
  public function 
ejecutar();
}
}
?>


saludar.class.php

Código PHP:
<?php

namespace saludo 
{
use 
accion accion;
 


class 
saludo implements accion 
{
  public function 
ejecutar()
  {
      print 
'hola que tal';
  }

}

}
?>

index.php

Código PHP:
<?php

require_once('clase.class.php');
require_once(
'saludar.class.php');

use 
saludosaludo;

$saludo = new saludo();


echo 
'hola mundo' "\n";

?>

El error que me devuelve es:

Código:
PHP Fatal error:  Interface 'saludo\accion' not found in /home/vagrant/pruebas/saludar.class.php on line 8
Gracias

Oskar.

Solucción:
Parece que por la versión con la que estoy trabajando la 5.3.1 no puedo hacer
Cita:
namespace Foo;
y tengo que hacer
Cita:
namespace Foo{};

Última edición por oskar_calvo; 31/03/2015 a las 05:23
  #2 (permalink)  
Antiguo 31/03/2015, 08:27
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: [POO] namespaces e interfaces, duda como hacerlo.

Recuerda cambiar a versiones mas recientes de php, la versión php 5.3 ya no tiene soporte desde el año pasado
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 31/03/2015, 14:47
 
Fecha de Ingreso: enero-2015
Mensajes: 43
Antigüedad: 9 años, 10 meses
Puntos: 3
Respuesta: [POO] namespaces e interfaces, duda como hacerlo.

a ver, en un script voy a invocar dos clases que se llaman igual cSaludo pero son de diferentes namespaces

fichero: iaccion.php
Código PHP:
Ver original
  1. <?php namespace mi_paquete;
  2.  
  3.  
  4.  
  5. interface IAccion
  6. {
  7.   public function ejecutar();
  8. }

fichero cSaludo.php

Código PHP:
Ver original
  1. <?php
  2. namespace mi_paquete;
  3. require_once('iaccion.php');
  4. use mi_paquete\IAccion ;
  5.  
  6.  
  7.  
  8.  
  9. class cSaludo implements IAccion
  10. {
  11.   public function ejecutar()
  12.   {
  13.       print "hola que tal soy ".__CLASS__."\n";
  14.   }
  15.  
  16. }


fichero: cOtroSaludo.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace mi_otro_paquete;
  4.  
  5.  
  6. class cSaludo  
  7. {
  8.   public function ejecutar()
  9.   {
  10.       print "hola que tal soy ".__CLASS__."\n";
  11.   }
  12.  
  13. }


y el script cliente: file.php
Código PHP:
Ver original
  1. <?php
  2. namespace mi_app;
  3. require_once('cSaludo.php');
  4. require_once('cOtroSaludo.php');
  5.  
  6. use \mi_paquete\cSaludo;
  7.  
  8. $saludo = new cSaludo();
  9. echo $saludo->ejecutar();
  10. $saludo2 = new \mi_otro_paquete\cSaludo();
  11. echo $saludo2->ejecutar();


output: Se cargaron dos clases con el mismo nombre y no chilla
  #4 (permalink)  
Antiguo 31/03/2015, 15:15
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: [POO] namespaces e interfaces, duda como hacerlo.

Ese es el comportamiento esperado ya que las dos clases tiene diferente namespace.
En tu caso esta es la parte clave:
Código PHP:
Ver original
  1. $saludo2 = new \mi_otro_paquete\cSaludo();
Con eso, el interprete sabe que esta instanciando; si hubieras usado use, habrías necesitado un alias (as)
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: interfaces
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 21:50.