PHP OOP - 未捕获错误:在不在对象上下文中时使用$ this

时间:2017-01-10 08:45:47

标签: php oop

所以我有一个数据库类,其函数如下:

public function sql($sql) {
    $result = $this->connection->query($sql);
    return $result;
}

但它返回错误:

  

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

但我不知道为什么我会收到这个错误,我已经在互联网上看了一眼,但似乎没有人有这个确切的问题。

这是我的完整数据库类:

namespace Core;

require_once ("../config.php");

class DB {

    public $connection;
    public function __construct() {
        $this->connection();
    }

    public function connection() {
        $this->connection = new \mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

        if ($this->connection->connect_error) {
            die("Database fout");
        }
    }

    public function sql($sql) {
        $result = $this->connection->query($sql);
        return $result;
    }
}

然后我这样称呼它:

DB::sql('SELECT * FROM `users`');

但后来我得到了错误。 :/

1 个答案:

答案 0 :(得分:2)

DB::sql('SELECT * FROM `users`');

这是静态函数调用方法,在静态函数中你不能使用$this  你需要像

一样打电话
$database = new DB();
$sql = $database->sql('SELECT * FROM `users`')

在这种情况下,根据您的评论,您的课程应该是

<?php
namespace Core;

require_once ("../config.php");

class DB
{
    public static $connection;

    public static function connection()
    {
        self::$connection = new \mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        if (self::$connection->connect_error) {
            die("Database fout");
        }
    }
    public static function sql($sql)
    {
        $result = self::$connection->query($sql);
        return $result;
    }
}
DB::connection();