2009-12-14 30 views
0

我是PHP新手,嘗試使用抽象和非抽象方法混合創建抽象類,然後擴展該類以實現抽象方法。以下是我的兩個類文件部分:在PHP中使用抽象類

<?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

您不包含具有ATableModel定義的文件。


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

謝謝,我知道這對於那些比我在這方面有更多經驗的人來說會是簡單的! – Elie 2009-12-14 04:15:47

1

在您的子類中,您必須包含()或require()(或require_once())您正在擴展的類文件。然而,我並不熟悉Zend,如果該框架應該包含同一目錄中的所有文件,不知道。

嘗試添加一些代碼以確保包含ATableModel的文件包含在內。

+1

如果您選擇使用自動加載,ZF只會自動加載自己的類。否則,您需要提供自己的自動加載器。 – pestilence669 2009-12-14 04:17:24

+0

您可以讓ZF自動加載任何類 - 請參閱http://framework.zend.com/manual/en/zend.loader.autoloader.html#zend.loader.autoloader.usage – StasM 2009-12-21 05:56:39