2010-12-12 4 views
1

Je travaille sur un nouveau widget pour la tomate CMS et ils utilisent une interface:PHP classe avec interface et erreur sur la méthode abstraite

interface Ad_Models_Interface_BannerPageAssoc 
{ 
    ... 

    /** 
    * Get banner-page by Zone Id 
    * 
    * @param int $zoneId Id of zone 
    */ 
    public function getByZoneId($zoneId); 
} 

et une autre classe qui implémente cette interface:

class Ad_Models_Dao_Mysql_BannerPageAssoc extends Tomato_Model_Dao 
implements Ad_Models_Interface_BannerPageAssoc 
{ 

    public function getByZoneId($zoneId) 
    { 
     $sql = sprintf("SELECT * FROM " . $this->_prefix . "ad_page_assoc"); 
     $rs = mysql_query($sql); 
     $rows = array(); 
     while ($row = mysql_fetch_object($rs)) { 
     $rows[] = $row; 
     } 
     mysql_free_result($rs); 
     return new Tomato_Model_RecordSet($rows, $this); 
    } 
} 

Quand je fais un objet de cette classe et appelle la fonction, je reçois cette erreur:

Fatal error: Class Ad_Models_Dao_Pdo_Mysql_BannerPageAssoc contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Ad_Models_Interface_BannerPageAssoc::getByZoneId) in C:\xampp\htdocs\roepingen\application\modules\ad\models\dao\pdo\mysql\BannerPageAssoc.php on line 59

quelqu'un at-VHA e une idée de comment je peux résoudre ce problème?

Répondre

1

Ad_Models_Dao_Mysql_BannerPageAssoc n'est pas la même classe que dans l'erreur: Ad_Models_Dao_Pdo_Mysql_BannerPageAssoc.

+0

C'est en effet de ma faute ... Merci d'avoir remarqué :-) – koko

0

Il peut y avoir un problème entre votre utilisation des mots-clés interface/abstract et extends/implements. Vous ne mentionnez pas la classe sur laquelle vous obtenez l'erreur, à savoir Ad_Models_Dao_Pdo_Mysql_BannerPageAssoc. Cette classe doit également implémenter les méthodes requises si elle implémente Ad_Models_Interface_BannerPageAssoc. Interfaces sont traités différemment de abtract classes en PHP.

Questions connexes