【问题标题】:Fatal error: Class 'Database' not found致命错误:找不到类“数据库”
【发布时间】:2013-09-23 13:50:53
【问题描述】:

我已经搜索过,但似乎找不到解决问题的方法。

每当我尝试启动一个新对象 $con = new Database(); 时,我都会收到此错误:

Fatal error: Class 'Database' not found in /customers/c/6/f/rowweb.dk/httpd.www/toolkit/e/includes/php/db/connect.php on line 3

我已经解决了一些问题,它可以很好地连接到我的数据库。我什至试图从与我的数据库类相同的文件中启动对象。

这是我的数据库连接:

$con = new Database();

class Database extends mysqli {
    function __construct() {
        parent::__construct('host', 'username', 'pass', 'database');
        if (mysqli_connect_errno()) {
            throw new Exception(mysqli_connect_error(),   
            mysqli_connect_errno());
        } 
    } 
}

谁知道可能是什么问题?

【问题讨论】:

  • 好像你没有将类包含到connect.php中......
  • 您是否包含了包含您的课程的文件?检查它是否正确包含并且可以使用class_exists()进行实例化

标签: php database class object mysqli


【解决方案1】:

在 PHP 中,必须先声明类,然后才能实例化它们。

来自http://php.net/manual/en/language.oop5.basic.php

要创建类的实例,必须使用 new 关键字。除非该对象定义了一个在错误时引发异常的构造函数,否则将始终创建一个对象。 类应该在实例化之前定义(在某些情况下这是一个要求)。

由于您的实例化和类声明发生在同一个文件中,并且您的错误发生在第 3 行,这很可能是您的问题。

【讨论】:

  • 该死的,当然。愚蠢的错误,谢谢指出! :)
【解决方案2】:

除非您有一些其他代码未在此处显示,否则您的问题是您没有包含定义数据库对象的文件。

有几种方法可以做到这一点,要么使用include/include_oncerequire/require_once,要么使用自动加载器。

包括和要求

这种包含方法实际上会将包含的文件连接到当前文件。例如,如果您有一个名为 a.php 的文件,如下所示:

$varA = 'I am A!';

还有一个名为 b.php 的文件,如下所示:

include('a.php');
echo $varA;

...您可以在b.php 中编写代码就像 a.php 中的代码在同一个文件中一样includerequire 的替代方法完全相同,但有一个重要区别。如果找不到include'd 的文件,则会发出警告。如果找不到require'd 的文件,这将是一个致命错误。

两种口味都有*_once 变体。没有它,文件每次都会附加,而include_once 只会在给定文件第一次调用时附加代码。

自动加载器

有两种方法可以添加自动加载器。自动加载器是一个“帮助器”,可以将您的脚本引导到文件的正确位置。每当您尝试使用 new 关键字或在某些其他情况下尝试创建新类时,都会执行此代码。

自动加载的一种方法是使用魔术函数__autoload。作为一般规则,不要使用它。另一种方法是spl_autoload_register[docs],它将给定的函数注册为“助手”。除非您有特定理由不使用此方法,否则您应该这样做。

这是一个简单的示例,来自文档:

function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');

文档

【讨论】:

  • 但这不是我在这里做的:$con = new Database();?所有这些都在我的连接文件中,它是索引上的require_once ('path'),并且在正确的路径中,因为它连接到我的数据库没有问题。
  • @JensAagren 没有看到该代码,我怎么可能解决它!? :) 你为什么不在你的问题中发布所有相关代码,我再看看。要回答您的问题,$con = new Database(); 与包含相应文件不同,不。不是没有自动加载器!
  • 嗯,它在我原始帖子的代码块中。是的,我忘了在第一篇文章中添加它,但它在 10 秒后被编辑了。
  • 您的问题中没有代码显示您需要或包含数据库类文件的位置。无论如何...
猜你喜欢
  • 2014-10-03
  • 2019-08-11
  • 1970-01-01
  • 2015-04-22
  • 2018-09-29
  • 2011-09-08
  • 2011-12-17
  • 2018-12-21
  • 2012-11-21
相关资源
最近更新 更多