带有接口的PHP类和关于抽象方法的错误

时间:2010-12-12 14:57:36

标签: php interface

我正在为Tomato CMS开发一个新的小部件,他们使用一个界面:

interface Ad_Models_Interface_BannerPageAssoc
{
    ...

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

和另一个实现此接口的类:

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);
    }
}

当我创建这个类的对象并调用该函数时,我收到此错误:

  

致命错误:类Ad_Models_Dao_Pdo_Mysql_BannerPageAssoc包含1个抽象方法,因此必须在C:\ xampp \ htdocs \ roepingen \ application \ modules \ ad \ models \ dao \ pdo中声明为抽象或实现其余方法(Ad_Models_Interface_BannerPageAssoc :: getByZoneId)第59行\ mysql \ BannerPageAssoc.php

有没有人知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Ad_Models_Dao_Mysql_BannerPageAssoc与错误中的类不同: Ad_Models_Dao_Pdo_Mysql_BannerPageAssoc

答案 1 :(得分:0)

使用关键字interface / abstract和extends / implements之间可能存在问题。您没有提到实际上出现错误的类,即Ad_Models_Dao_Pdo_Mysql_BannerPageAssoc。如果它实现了Ad_Models_Interface_BannerPageAssoc,那么该类还必须实现所需的方法。 Interfaces的处理方式与PHP中的abtract classes不同。