What is Fatal error: Uncaught Error: Using $this when not in object context?

What is Fatal error: Uncaught Error: Using $this when not in object context?

我想使用 md5 函数加密 php 中的密码,但出现错误。

Fatal error: Uncaught Error: Using $this when not in object context in ....(line)

这段代码是我从 this link 跟进的,但它是错误的。我试图在 Whosebug 上搜索类似的问题,但没有找到与我相同的情况。这是我的代码。有谁能帮帮我吗?

发现错误的行。 $this->stmt = $this->pdo->prepare($sql);

这是我的代码

<?php
    require_once('connect01.php');

    function addUser($name, $password){
        $hash = md5($password);
        $sql = "INSERT INTO `user` (`username`, `pass`) VALUES ('$name','$password')";
        $this->stmt = $this->pdo->prepare($sql);
        return $this->stmt->execute([$name, $hash]);
    }

    if(isset($_POST['submit'])){

        addUser($_POST['username'], $_POST['pass']);
    }
    ?>

$this 在 class 之外并不是特别有用。 learn about classes 后,您可以返回找到的那个站点。

如果你想使用 addUser(),你需要一个 class,其中 $pdo class 属性 是 [=30= 的一个实例]

The previous page showed you a script named database.php containing the DB class, a model in the model-view-controller 设计模式。它符合上述要求。

和运行最直接的方法是将DB class定义添加到脚本中,并将addUser()的函数定义放在脚本中它。

设置完成后,一旦了解了 inheritance,您可以考虑在脚本中保留 DB class,但按原样离开,不要 addUsers()。如果你 extends 它仍然可以使用和添加它:

class User extends DB
{
    function addUser($name, $password)
    {
        $hash = md5($password);
        $sql = "INSERT INTO `user` (`username`, `pass`) VALUES ('$name','$password')";
        $this->stmt = $this->pdo->prepare($sql);
        return $this->stmt->execute([$name, $hash]);
    }
}

请记住,如果您选择这种方法,您需要将 DB::$pdoDB::$stmtprivate 更改为 protected:

class DB
{
    protected $pdo = null;
    protected $stmt = null;
/* keep the rest of the class the same */

这是因为 private class 属性不可用于 ("visible") 扩展第一个 class 的 class,但 protected class 属性是。这是一个名为 visibility.

的概念的一部分