2009-12-14 8 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

1

하위 클래스에는 확장하려는 클래스 파일을 포함()하거나 require() (또는 require_once())해야합니다. 그러나 나는 젠드에 익숙하지 않다. 그리고 그 프레임 워크가 같은 디렉토리에 모든 파일을 포함한다고 가정한다면 모르겠다.

일부 코드를 추가하여 ATableModel이 포함 된 파일이 포함되는지 확인하십시오.

+1

ZF는 자동 로딩을 사용하는 경우 자체 클래스 만 자동로드합니다. 그렇지 않으면 자체 오토로더를 제공해야합니다. – pestilence669

+0

ZF에서 모든 클래스를 자동으로로드 할 수 있습니다. http://framework.zend.com/manual/en/zend.loader.autoloader.html#zend.loader.autoloader.usage를 참조하십시오. – StasM