2015-05-14 99 views
0

我有一個定義的幾個功能的PHP類,這個類是負責數據庫的訪問:PHP - 調用未定義的方法

class database { 

    function open($params) { 
     // code here to open the db 
    } 

    function close() { 
     // code here to close the db 
    } 

    function count_users() { 
     // code here counts the number of user records 

     // Return -1 for testing 
     return -1; 
    } 

    function insert_user($user) { 
     // code here inserts a user record 
    } 

    function select_user($user_id) { 
     // code here selects a user record 
    } 

} 

我已經訪問類的定義如下:

require_once("database.php"); 

class user { 

    public $user_id; 
    public $email_address; 
    // etc, etc 

} 

class db_user { 

    static function select_user($user_id) { 
     $db = new database(); 
     $db->open(); 

     $user = NULL; 

     $result = $db->select_user($user_id); 

     // Test the result and decode user record into $user, etc 

     $db->close(); 

     return $user; 
    } 

    static function count_users() { 
     $db = new database(); 
     $db->open(); 

     $count = $db->count_users(); 

     $db->close(); 

     return $count; 
    } 

} 

當我嘗試通過db_user::count_users();統計用戶數量時,出現我的問題,該用戶總是以發生故障致命錯誤:調用未定義的方法數據庫:: count_users

如果我使用get_class_methods轉儲數據庫類方法,我可以看到count_users函數不在列表中,但我不知道爲什麼。

我非常喜歡PHP n00b,所以有些事情可能真的很明顯,我沒有做。我的db_useruser類有許多其他功能,通過database類將數據拉回,並且所有這些都成功 - 只是這一個功能。

請幫忙!


UPDATE

好了,所以,在除去從一對夫婦的功能,數據庫類和重新上傳文件到直播服務器,看來,它以某種方式被「緩存」,當我轉儲屬於數據庫對象的方法,刪除的方法仍顯示在列表中。

當我檢查上傳到服務器的文件時,count_users函數在方法列表中也不存在,它在代碼中。

有沒有什麼辦法去除這個緩存?

+0

'db_user'沒有'count_users'方法這個方法在類'database'中,你可以'擴展''db_user'類或最好的方法是使用'Dependency injection' – VeeeneX

+0

這個方法確實存在於db_users類和數據庫類 - 它的數據庫之一,但它抱怨雖然。 – weblar83

+0

@ weblar83請爲方舟提供答案,併爲其他人提供幫助。謝謝。 –

回答

1

嘗試如下:

class user extends database { 
    //code user class goes here 
} 

class user extends db_user { 
    //code user class goes here 
} 

簡單的問題就迎刃而解了。

+0

但爲什麼問題首先存在?正如我所提到的,「db_user」類中的所有其他函數除了這一個「count_users」函數外都可以工作。爲什麼?這個有什麼不同? – weblar83

1

您可以將數據庫的實例存儲到變量中。

class db_user { 
    public static $db; 
    static function openDatabase(){ 
     self::$db = new database(); 
     self::$db->open(); 
    } 
    static function select_user($user_id) { 

     $user = NULL; 

     $result = self::$db->select_user($user_id); 

     // Test the result and decode user record into $user, etc 

     self::$db->close(); 

     return $user; 
    } 

    static function count_users() { 

     $count = $db->count_users(); 

     self::$db->close(); 

     return $count; 
    } 

} 
0

試圖在網上phptester工具運行代碼 - 第一個抱怨$db->open()失蹤$params,去除參數(或傳遞到$ params)它工作在PHP 5.2,5.3,5.4罰款。沒有關於count_users()的投訴。

+0

我剛剛嘗試在我的本地ZWAMP服務器上運行我的代碼,它工作得很好,沒有問題。如果我嘗試在活動服務器上運行相同的代碼,那就是問題發生的時間 - 可能是PHP版本的差異? – weblar83

+0

在我的本地機器上,我運行PHP 5.4.12,但在現場,它的運行5.4.39 ... – weblar83

1

這個問題看起來與隱藏在子文件夾中的另一個版本的「database.php」文件有關,該子文件夾必須在那裏被錯誤地複製。

刪除了這個麻煩的文件後,現在所有的功能都按預期工作。

感謝您的幫助。

相關問題