使用PHP的抽象类

时间:2009-12-14 04:09:02

标签: php zend-framework

我是PHP的新手,并且正在尝试使用抽象和非抽象方法的混合创建一个Abstract类,然后扩展该类以实现抽象方法。以下是我的两个类文件的一部分:

<?php
require_once 'Zend/Db/Table/Abstract.php';
abstract class ATableModel extends Zend_Db_Table_Abstract {

    abstract static function mapValues($post);
    abstract static function getTableName();

    public static function newEntry($post)  {  
        $db = Zend_Db_Table_Abstract::getDefaultAdapter();
        $data = mapValues($post, true);
        $db->insert(getTableName(), $data);
        $id = $db->lastInsertId();
        return $id;  
    }

    public static function getEntry($id){
        $db = Zend_Db_Table_Abstract::getDefaultAdapter();
        $db->setFetchMode(Zend_Db::FETCH_OBJ);
        return $db->fetchRow("
            SELECT *
            FROM ".getTableName()." 
            WHERE ID = '".(int)$id."'
            "
        );
    }

    public static function editEntry($id,$post) {  
        $db = Zend_Db_Table_Abstract::getDefaultAdapter();
        $data = mapValues($post);
        $db->update(getTableName(), $data, " ID = '".(int)$id."' ");
    }

    public static function deleteEntry($id) {
        $db = Zend_Db_Table_Abstract::getDefaultAdapter();
        $db->delete(getTableName()," ID = '".(int)$id."' ");
    }
}
?>

子类看起来如下:

<?php
require_once 'Zend/Db/Table/Abstract.php';
class Testing extends ATableModel {

    public static function getTableName() 
    {
        return 'TESTING';
    }

    public static function mapValues($post) 
    {
        $data = array (
            'test_description'      => htmlentities($post['testDescription'])
        );
        return $data;
    }
}
?>

两个文件都位于彼此相同的目录中。但是,当我尝试运行我的应用程序时,出现以下错误:

Fatal error: Class 'ATableModel' not found in /var/www/testApp/application/models/testing.php on line 20

我的猜测是,我正在加载文件的顺序或这些文件所在的位置相对于彼此有问题。但是,我不知道如何从这里开始。建议?

2 个答案:

答案 0 :(得分:2)

您没有在文件中包含ATableModel定义。


<?php
// in your test
require_once 'Zend/Db/Table/Abstract.php'; // <- should be the file with ATableModel

答案 1 :(得分:1)

在您的子类中,您必须包含()或require()(或require_once())您正在扩展的类文件。我不熟悉Zend,如果该框架应该包含同一目录中的所有文件,那就不知道了。

尝试添加一些代码以确保包含ATableModel的文件。