致命错误:不在对象上下文中时使用 $this

2023-03-06php开发问题
4

本文介绍了致命错误:不在对象上下文中时使用 $this的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有这个类用于使用 php/mysqli 连接到 mysql 数据库:

class AuthDB {私人 $_db;公共函数 __construct() {$this->_db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME)or die("连接数据库有问题.错误:".mysqli_error());}公共函数 __destruct() {$this->_db->close();未设置($this->_db);}}

现在,我有列表用户的任何页面:

require_once 'classes/AuthDB.class.php';session_start();$this->_db = new AuthDB();//这条线的错误$query = "SELECT Id, user_salt, password, is_active, is_verified FROM Users where email = ?";$stmt = $this->_db->prepare($query);//绑定参数$stmt->bind_param("s", $email);//执行语句如果 ($stmt->execute()) {//绑定结果列$stmt->bind_result($id, $salt, $pass, $active, $ver);//获取第一行结果$stmt->fetch();回声 $id;}

现在,我看到这个错误:

致命错误:第 6 行中不在对象上下文中时使用 $this

如何修复这个错误?!

解决方案

就像错误所说的那样,您不能在类定义之外使用 $this.要在类定义之外使用 $_db,首先将其设为 public 而不是 private:

public $_db

然后,使用此代码:

$authDb = new AuthDb();$authDb->_db->prepare($query);//其余代码相同

--

您必须了解 $this 的实际含义.在类定义中使用时,$this 用于引用该类的对象.因此,如果您在 AuthDB 中有一个函数 foo,并且您需要从 foo 内访问 $_db,您将使用 $this 告诉 PHP 您想要 $_db 来自 foo 所属的同一对象.

您可能想阅读这个 StackOverflow 问题:PHP:self vs $this>

i have this class for connect to mysql database using php/mysqli:

class AuthDB {
    private $_db;

    public function __construct() {
        $this->_db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME)
        or die("Problem connect to db. Error: ". mysqli_error());
    }

    public function __destruct() {
        $this->_db->close();
        unset($this->_db);
    }
}

now, i have any page for list user :

require_once 'classes/AuthDB.class.php';

session_start();

$this->_db = new AuthDB(); // error For This LINE
$query = "SELECT Id, user_salt, password, is_active, is_verified FROM Users where email = ?";
$stmt = $this->_db->prepare($query);

        //bind parameters
        $stmt->bind_param("s", $email);

        //execute statements
        if ($stmt->execute()) {
            //bind result columnts
            $stmt->bind_result($id, $salt, $pass, $active, $ver);

            //fetch first row of results
            $stmt->fetch();

            echo $id;


        }

now, i see this error:

Fatal error: Using $this when not in object context in LINE 6

How to fix this error?!

解决方案

Like the error says, you can't use $this outside of the class definition. To use $_db outside the class definition, first make it public instead of private:

public $_db

Then, use this code:

$authDb = new AuthDb();
$authDb->_db->prepare($query); // rest of code is the same

--

You have to understand what $this actually means. When used inside a class definition, $this is used to refer to an object of that class. So if you had a function foo inside AuthDB, and you needed to access $_db from within foo, you would use $this to tell PHP that you want the $_db from the same object that foo belongs to.

You might want to read this StackOverflow question: PHP: self vs $this

这篇关于致命错误:不在对象上下文中时使用 $this的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17