我正在为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
有没有人知道如何解决这个问题?
答案 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不同。