加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP类范围

发布时间:2020-12-13 22:02:21 所属栏目:PHP教程 来源:网络整理
导读:我在我正在构建的应用程序中有几个类,我希望有一个访问其他一些成员函数,但我似乎无法做到. 第一个类叫做MySQLDB: class MySQLDB{public $connection;function __construct(){//connects to database}function login($username,$password){//queries databa
我在我正在构建的应用程序中有几个类,我希望有一个访问其他一些成员函数,但我似乎无法做到.

第一个类叫做MySQLDB:

class MySQLDB{
public $connection;

function __construct(){
//connects to database
}

function login($username,$password){
//queries database...
}
}

然后我有一个名为Session的类:

class Session{
//variables
//constructor

function processlogin($username,$password){
$database->login($username,$password);
}

然后我有两个类声明:

$database = new MySQLDB();
$session = new Session();

无论我把这些语句放在哪个类中,我仍然会得到同样的错误:

PHP Notice:  Undefined variable: database in C:inetpubwwwrootcmuincludesession.php on line 52
PHP Fatal error:  Call to a member function login() on a non-object in C:inetpubwwwrootcmuincludesession.php on line 52

我已经看到一些建议,建议将新数据库对象放在Session类声明中,但我想避免这样做,因为我在代码中使用数据库类的其他几个地方而且我不想打开多个连接到数据库.

解决方法

由于您希望对全局设置变量具有访问权限,因此您可以使用全局变量访问它:

function processlogin($username,$password){
    global $database;
    $database->login($username,$password);
}

或者使用变量作为构造函数的参数,并记住类Session中的数据库对象引用:

class Session{

    private $database;

    function __construct($database){
        $this->$database = $database;
    }

    function processlogin($username,$password){
        $this->database->login($username,$password);
    }

}

然后你打电话:

$database = new MySQLDB();
$session = new Session($database);

这很方便,如果你使用更多的函数后,还需要访问数据库对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读