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

error fatal con interface

Estas en el tema de error fatal con interface en el foro de Frameworks y PHP orientado a objetos en Foros del Web. tengo esta interface Código PHP: <?php interface  IArchive {     public function  archiveItems ( $key ); } ?> esta otra Código PHP: <?php interface  IPaginate {     public function  ...
  #1 (permalink)  
Antiguo 15/04/2009, 19:49
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 17 años, 2 meses
Puntos: 18
error fatal con interface

tengo esta interface
Código PHP:
<?php
interface IArchive
{
    public function 
archiveItems($key);
}
?>
esta otra
Código PHP:
<?php
interface IPaginate
{
    public function 
totalItems();
    public function 
paginateItems($i,$j,$key);
}
?>
y esta clase que implementa

Código PHP:
<?php
require_once("CLDB.php");
require_once(
"IPaginate.php");
require_once(
"IArchive.php");
class 
DArticles implements IArchive,IPaginate
{
    private static 
$numberRows;
    private static 
$idItem;
    public static 
$dbQuery;
    public function 
__construct()
    {
        
self::$dbQuery DB::connectionDB();
    }
    
/***************implementando interface paginate******************/
    
public function totalItems()
    {
        
self::$dbQuery->setSql("SELECT * FROM aep_articles ORDER BY datetime_public_articles DESC");
        return 
self::$dbQuery->getNumRows();
    }
    public function 
paginateItems($pagerow,$forpage,$key=0)
    {
        
self::$dbQuery->setSql("SELECT * FROM aep_articles ORDER BY datetime_public_articles DESC");
        
self::$dbQuery->setSqlLimit($pagerow,$forpage);
        return (
$key===0)?self::$dbQuery->getFetchRowArray():self::$dbQuery->getFetchRowAssoc();
    }
    
/****************************implementando interface Archive*******************/
    
public function archiveItems($key=0)
    {
        
self::$dbQuery->setSql("SELECT datetime_public_articles FROM aep_articles ORDER BY datetime_public_articles DESC");
        return (
$key===0)?self::$dbQuery->getFetchRowAssoc():self::$dbQuery->getFetchRowArray();
    }
//otros metodos propios de lcase
?>
me sale este error en hosting(en mi local no)
Fatal error: Declaration of DArticles::archiveItems() must be compatible with that of IArchive::archiveItems() in /www/hosting/home/site/CLData/CLDArticles.php on line 5
pero he analizado bien, ya que la otra interfaz tb es similar y no me da ningún error.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #2 (permalink)  
Antiguo 15/04/2009, 20:08
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 5 meses
Puntos: 102
Respuesta: error fatal con interface

... primero, ve si hay alguna diferencia de configuración para la muestra de errores (error_reporting, show_errors) entre tu hosting y tu máquina.

El error es por el valor por default que le estás dando al implementar la interfaz. Si le das o no valor, debe implementarse de la misma manera ...

Solución que creo te acomoda: darle un valor de null a la key de tu interface:
Código php:
Ver original
  1. <?php
  2. interface IArchive
  3. {
  4.     public function archiveItems($key = null);
  5. }

O darle cero y validar el parámetro cuando lo implementes, según lo que necesites. Suerte
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 16/04/2009, 15:02
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 17 años, 2 meses
Puntos: 18
Respuesta: error fatal con interface

mmmm, pero si notas en la otra interface declaro dos métodos similares al de la interface IArchive y no me da ningún error.

pero de todas formas revisaré lo que me comentas y espero solucionarlo

muchas gracias.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #4 (permalink)  
Antiguo 16/04/2009, 15:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: error fatal con interface

El problema como bien te lo dijo jam es la firma de la interfaz, tiene que ser igual inclusive si el parámetro es opcional.

Saludos.
  #5 (permalink)  
Antiguo 16/04/2009, 15:11
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 17 años, 2 meses
Puntos: 18
Respuesta: error fatal con interface

si está igual o a que te refieres Gatorv.

muchas gracias por el interés que muestran.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #6 (permalink)  
Antiguo 16/04/2009, 15:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: error fatal con interface

En tu class:
Código php:
Ver original
  1. public function archiveItems($key=0)
En la interfaz:
Código php:
Ver original
  1. public function archiveItems($key);

Las firmas no son iguales ya que la interfaz espera un valor y en tu clase es opcional, debe de ser igual.

Saludos.
  #7 (permalink)  
Antiguo 16/04/2009, 15:28
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 5 meses
Puntos: 102
Respuesta: error fatal con interface

... y si haces en tu interfaz:
Código php:
Ver original
  1. public function archiveItems($key = null);

ya podrás hacer en tu class
Código php:
Ver original
  1. public function archiveItems($key=0)

y deberás tener el mismo comportamiento, porque de por si en la interfaz no tenía valor ... osea, null .

divertido esto.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 16/04/2009, 15:47
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 17 años, 2 meses
Puntos: 18
Respuesta: error fatal con interface

bueno creo que tienen razón, seguiré sus recomendaciones, pero una pregunta tontan me surge porque no me muestra el mismo error con la otra interface????

gracias, luego les comento como me fue, ya que sólo tengo ese error al subir al host el sistema.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #9 (permalink)  
Antiguo 16/04/2009, 15:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: error fatal con interface

Pues es probable (sin ver el código) que en la otra clase la firma sea la misma, poru eso no te da error.

Saldos.
  #10 (permalink)  
Antiguo 16/04/2009, 18:40
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 17 años, 2 meses
Puntos: 18
Respuesta: error fatal con interface

exactamente el error fue lo que me comentaron

muchas garcias.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
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 02:35.