致命错误:找不到“数据库”类

时间:2013-09-18 17:15:29

标签: php database class object mysqli

我搜索过,似乎无法找到解决问题的方法。

每当我尝试发起一个新对象$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());
        } 
    } 
}

任何知道可能是什么问题的人?

2 个答案:

答案 0 :(得分:1)

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

通过使用include/include_oncerequire/require_once或使用自动加载器,有两种方法可以实现此目的。

包括&需要

这种包含方法实际上将包含的文件加入当前文件。例如,如果您有一个名为a.php的文件,请执行以下操作:

$varA = 'I am A!';

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

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

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

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

<强>自动装

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

一种自动加载方法使用魔术函数__autoload。一般来说,不要使用它。替代方案是spl_autoload_register [docs],它将给定函数注册为“帮助者”。除非你有特殊理由不使用这种方法,否则你应该这样做。

这是一个简单的例子,直接来自文档:

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

<强>文档

答案 1 :(得分:1)

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

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

  

     

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

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