1

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

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

谁知道可能是什么问题?

4

2 回答 2

1

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

有几种方法可以完成此操作,或者使用include/include_oncerequire/require_once,或者使用自动加载器。

包括和要求

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

$varA = 'I am A!';

和一个b.php这样的文件:

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

...您可以编写代码,b.php 就好像 a.php 中的代码在同一个文件中一样include, ,的替代方法require完全相同,但有一个重要区别。如果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');

文档

于 2013-09-18T17:18:35.647 回答
1

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

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

新的

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

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

于 2013-09-18T17:20:45.193 回答