我有一个名为Login.php的文件,它给出了以下错误:
Fatal error: Class 'Login' not found
文件结构如下:
require_once('includes/Config.php');
require_once('includes/Initialize.php');
require_once('includes/Database.php');
require_once('includes/Cookie.php');
$database = new Database();
$login = new Login($database);
?>
<!-- Start of HTML SECTION COMES HERE -->
<form action="Login.php" method="POST">
<input type="text" name="Username" />
<input type="text" name="Password" />
<input type="submit" value="Submit" />
</form>
<!-- End of HTML SECTION COMES HERE -->
<?php
require_once('includes/Config.php');
class Login extends Config{
function __construct(){
//Construct function handles the forms
}
现在,众所周知,当您在编程语言中使用类,函数,变量或任何其他名称引用时,必须首先声明它。 问题是,代码实际上没有扩展名:
class Login{
function __construct(){
//Construct function handles the forms
}
完美无缺。
如上所述,在添加扩展名之后,就会出现问题。 我有一些其他类使用相同的方法,并扩展Config类,而不返回任何错误。
任何想法在这里会发生什么不同?
那么,您认为该结构是首选吗?
如果在许多线程中提到这个问题,并且在stackoverflow上也是如此,但正如我所看到的那样,有些人说这是一个错误,但没有真正的解决方案出现,而且它已经出现了#39有人说过很多早期的版本哦PHP。
答案 0 :(得分:0)
将文件内的订单切换为:
宣布上课。
之前调用它?&gt;以及课程结束后。
然后HTML代码来了。
立即行动。
答案 1 :(得分:0)
PHP脚本执行分两步进行:首先将文件编译为二进制格式,然后解释这种二进制格式,一次一个语句。
编译步骤验证程序是否符合语言的词法和语法规则。但是,它仅检查并编译传递给它的主文件。在执行步骤中处理包含的文件。在编译步骤中,不会以任何方式检查它们(甚至不存在它们。)
让我们看看你的程序是如何执行的。首先,验证代码的语法,并将其编译为二进制格式。 Login
类在文件中定义,但它扩展了此处未定义的Config
类。它可能在includes/Config.php
文件中定义,但该文件不是在编译步骤中编译,而是在运行时编译。这使得Login
类的定义在编译步骤之后不可用,这就是解释器无法找到它的原因。在解释器读取并执行Config
类的定义之后,它将在执行步骤中完成。
如果在声明之后移动Login
类的用法,当解释器在运行时到达语句require 'includes/Config.php';
时,它会读取并编译文件,这样它就可以了解类{ {1}}。当它到达类Config
的声明时,它知道类Login
的外观如何,它也可以构建类Config
的定义。只有在那之后,课程Login
才可供使用。