我有胎儿错误消息说:
致命错误:无法在第3行的C:\ wamp\www\pets_new\lib\database.php中重新声明类数据库
require_once("lib/message.php");
require_once("lib/user.php");
Run Code Online (Sandbox Code Playgroud)
并且都连接到数据库类
班级留言
<?php
require('database.php');
class Message{
Run Code Online (Sandbox Code Playgroud)
班级用户:
<?php
require('database.php');
class User{
Run Code Online (Sandbox Code Playgroud)
您在一个"运行"中包含2个文件.可以这样想:所有包含的文件都由PHP组合在一起创建一个大脚本.每个include或require获取一个文件,并将其内容粘贴到一个大脚本中.
您包含的两个文件都需要相同的文件,该文件声明了Database该类.这意味着PHP生成的大脚本如下所示:
class Message
{}
class Database
{}//required by message.php
class User
{}
class Database
{}//required by user.php
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,类Database被声明两次,因此出错.
目前,快速修复可以用以下require('database.php');语句替换语句:
require_once 'database.php';
Run Code Online (Sandbox Code Playgroud)
哪个检查以前是否未包含/要求该特定文件.如果之前已经包含/需要,PHP将不再需要它.
一个更明确的,恕我直言,更好的解决方案是注册自动加载器功能/类方法,并让该代码处理业务.
有关如何注册自动加载器的更多信息,请参阅文档.如果沿着这条路走下去,你可能想看看这里有关类名和命名空间的编码标准.如果符合这些标准,则不必编写自己的自动加载器,只需使用Symfony2中的通用类加载器,或任何其他订阅PHP-FIG标准的框架(如CodeIgnitor,Zend,Cake ..你的名字
这意味着您已经声明了类 Database,第二次加载它(无论副本在哪里),都会导致错误。我们无法看到您引用的两个文件的内容。但是,我确信如果您查看它们,您会发现至少有两个数据库类的创建。需要移除一个。