PHP mysqli连接类 – 无法访问外部的连接变量.范围问题

参见英文答案 > Call to a member function on a non-object                                     8个
我是新手以OOP方式使用PHP但发现我的数据库连接类有问题.

这里有一个MysqLi连接类的文件

$db_name = 'dbname';
$db_user = 'dbuser';        
$db_password = 'dbpassword';
$db_host = 'localhost';

class database {

    public $MysqLi;

    public function connect($db_host,$db_user,$db_password,$db_name){

        $this->MysqLi = new MysqLi($db_host,$db_name);

        if ($MysqLi->connect_errno) {
            return "Sorry Andre,but you seem to have messed up the DB connection :(";
        }
    }
}

$newConnection = new database;
$newConnection->connect($db_host,$db_name);

然后我想在另一个文件中的数据库连接中使用变量$MysqLi – 这是使用$MysqLi变量连接到数据库的简单插入.我将上面的内容包含在连接文件中,但是当我在数据库类中调用方法时,似乎没有返回$MysqLi变量.我得到PHP错误说…

Fatal error: Call to a member function prepare() on a non-object in...

我见过那个用

global $MysqLi;

然而,我想以正确的方式去做,因为我听说这不是好的做法.

我知道我可能在这里做错了,因为我不熟悉使用OOP但是我假设通过在connect函数中返回该变量,我可以通过在外部创建类来访问它.

感谢帮助,
谢谢.

解决方法

在外面使用它时,您可以通过实例访问类变量

$newConnection = new database;
$newConnection->connect($db_host,$db_name);
$newConnection->MysqLi /* here you have access from outside */

从里面你使用关键字$this …

// like this from inside
if ($this->MysqLi->connect_errno) {
    return "Sorry Andre,but you seem to have messed up the DB connection :(";
}

如果您想保护您的变量不受外部访问使用:

private $MysqLi; 
  // instead of 
  public $MysqLi;

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...