我搜索过,似乎无法找到解决问题的方法。
每当我尝试发起一个新对象$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());
}
}
}
任何知道可能是什么问题的人?
答案 0 :(得分:1)
除非您有其他一些未在此处显示的代码,否则您的问题是您没有包含定义数据库对象的文件。
通过使用include/include_once
或require/require_once
或使用自动加载器,有两种方法可以实现此目的。
包括&需要强>
这种包含方法实际上将包含的文件加入当前文件。例如,如果您有一个名为a.php
的文件,请执行以下操作:
$varA = 'I am A!';
和一个名为b.php
的文件,如下所示:
include('a.php');
echo $varA;
...您可以在b.php
中编写代码,就好像a.php中的代码位于同一个文件中一样。 include
,require
的替代方案完全相同,但有一个重要区别。如果找不到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行,这很可能是您的问题。