OOP PHP未定义变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OOP PHP未定义变量相关的知识,希望对你有一定的参考价值。

我正在使用这个库,当我穿上我的OOP项目时,它给了我一个错误https://github.com/lincanbin/PHP-PDO-MySQL-Class

注意:未定义的变量:第13行的E: Laragon www shop include category.php中的DB

致命错误:未捕获错误:在E: Laragon www shop include category.php中调用null上的成员函数query():13堆栈跟踪:#0 E: Laragon www shop admin category .php(8):类别 - > getAllCategories()#1 {main}在第13行的E: Laragon www shop include category.php中抛出

在我的类别课上

<?php

require_once('../vendor/autoload.php');

class Category {
    function __construct()
    {
        $DB = new Db('localhost', '3306', 'shop', 'root', '');
    }

    public function getAllCategories()
    {
        $query = $DB->query("SELECT * FROM categories");

        return $query;
    }
   ...
}

在我的PHP前端

<?php

    require_once('../include/category.php');


    $test = new Category();

    var_dump($test->getAllCategories());
?>

编辑Jite

每个查询如insert,getall,select,delete都需要添加closeConnection吗?我在这里找到了这个:https://stackoverflow.com/a/20492486/5406008 require_once('../ vendor / autoload.php');

class Category {
    protected $DB;

    function __construct()
    {
        $this->DB = new Db('localhost', '3306', 'shop', 'root', '');
    }

    public function __destruct()
    {
       $this->DB->closeConnection();
    }

    public function getAllCategories()
    {
        $query = $this->DB->query("SELECT * FROM categories");

        return $query;
    }
答案

在类方法中创建新变量时,它只存在于该范围内,因此在构造函数中创建$DB变量时,当到达构造函数的末尾时,它将超出范围。

要将变量作为成员字段存储在类中,您必须将其设置为$this对象,最好先定义它:

class Category {
    private $DB;
    function __construct()
    {
        $this->DB = new Db('localhost', '3306', 'shop', 'root', '');
    }

    public function getAllCategories()
    {
        $query = $this->DB->query("SELECT * FROM categories");

        return $query;
    }
   ...
}

这样,该类将变量存储为成员,并使其在所有方法中可用。

另一答案

请将$DB定义为类变量,然后使用它。

<?php   
require_once('../vendor/autoload.php');
class Category {
 private $DB; // Define it here.
 function __construct() {
  $this->DB = new Db('localhost', '3306', 'shop', 'root', ''); // Set value here
 }
 public function getAllCategories() {
  $query = $this->DB->query("SELECT * FROM categories"); // Get value here
  return $query;
 }
 ...
}
另一答案

将您的班级更改为:

class Category {

protected $DB;

function __construct()
{
    $this->DB = new Db('localhost', '3306', 'shop', 'root', '');
}

public function getAllCategories()
{
    $query = $this->DB->query("SELECT * FROM categories");

    return $query;
}

... }

以上是关于OOP PHP未定义变量的主要内容,如果未能解决你的问题,请参考以下文章

为什么变量没有未定义?

PHP - 私有类变量给出错误:未定义的变量

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

XAMPP PHP 错误通知:从 HTML 到 PHP 的“未定义变量”

我什么时候在php中使用静态变量/函数?