2015-05-14 87 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”文件有关,该子文件夹必须在那里被错误地复制。

删除了这个麻烦的文件后,现在所有的功能都按预期工作。

感谢您的帮助。

相关问题