致命错误:无法重新声明类数据库

时间:2014-04-14 11:16:09

标签: php oop

我有胎儿错误消息说:

  

致命错误:无法在第3行的C:\ wamp \ www \ pets_new \ lib \ database.php中重新声明类数据库

require_once("lib/message.php");
require_once("lib/user.php");

并且所有连接到数据库类

课程消息

<?php

require('database.php');

class Message{

班级用户:

<?php

require('database.php');

class User{

3 个答案:

答案 0 :(得分:7)

您在一个“运行”中包含2个文件。可以这样想:所有包含的文件都由PHP组合在一起创建一个大脚本。每个includerequire都会抓取一个文件,并将其内容粘贴到该大文件中。

您要包含的两个文件,需要相同的文件,它声明了Database类。这意味着PHP生成的大脚本如下所示:

class Message
{}
class Database
{}//required by message.php
class User
{}
class Database
{}//required by user.php

正如您所见,类Database被声明两次,因此错误 目前,快速修复可以将require('database.php');语句替换为:

require_once 'database.php';

检查之前是否未包含/要求该特定文件。如果之前已经包含/需要,PHP将不再需要它。
一个更明确的,恕我直言,更好的解决方案是注册一个自动加载器函数/类方法,并让该代码处理业务。

有关如何注册自动加载器的更多信息can be found in the docs。如果沿着这条路走下去,你可能想看看有关类名和命名空间here的编码标准。如果符合这些标准,则不必编写自己的自动加载器,只需使用Symfony2中的通用类加载器,或任何其他订阅PHP-FIG标准的框架(如CodeIgnitor,Zend,Cake ..你给它命名)

答案 1 :(得分:1)

尝试这样,同时声明类

if(  !class_exists('database') ) {
    require('database.php');
}

答案 2 :(得分:0)

这意味着你已经声明了类Database,第二次加载它(复制的地方),它会导致错误。我们无法看到您引用的两个文件的内容。但是,我敢肯定,如果你查看它们,你会发现至少有两个类数据库的创作。一个人需要被删除。