PHP:无法声明类,因为该名称已在使用中

时间:2017-03-08 21:45:48

标签: php oop

我有5个脚本,让我们说:database.php,parent.php,child1.php,child2.php和somescript.php

parent.php类看起来像这样:

include 'database.php';

class Parent {
    public $db;
    function __construct() {
        $this->db = new Database();
    }
}

child1和child2类看起来像这样:

include 'parent.php';

class Child1 extends Parent {
    function __construct() {
        parent::__construct();
    }

    function useDb() {
        $this->db->some_db_operation();
    }
}

问题

当我尝试在somescript.php中包含child1和child2时,它会返回以下错误:

  

无法声明类Database,因为该名称已在使用中   第4行上的database.php(这是包含单词' class Database'的行)

但是如果我只包含一个文件(child1或child2),那么效果很好。

我该如何纠正?

7 个答案:

答案 0 :(得分:25)

您要使用include_once()require_once()。另一种选择是创建一个附加文件,其中所有类包括在正确的顺序中,这样他们就不需要自己调用包含它们了:

“classes.php”

include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';

然后你需要:

require_once('classes.php');

答案 1 :(得分:7)

尝试使用include_oncerequire_once代替includerequire

答案 2 :(得分:3)

您应该使用require_once和include_once。在parent.php内部使用

include_once 'database.php';

在child1.php和child2.php内部使用

include_once 'parent.php';

答案 3 :(得分:1)

Class Parent不能声明,因为它是PHP保留关键字,因此实际上它已经在使用中

答案 4 :(得分:0)

我以前有这个问题,并且要解决, 只要确保:

  1. 您之前没有创建此类的实例
  2. 如果您从类方法中调用此方法,请确保在您从中调用的类上设置了__destruct。

我的问题(之前):
我上过课:核心,路由器,权限和渲染 核心包含的是Router类,Router然后调用Permissions类,然后Router __destruct调用Render类,并出现错误“由于名称已在使用中而无法声明类”。

解决方案:
我在Permission类上添加了__destruct,并且__destruct为空,并且已修复...

答案 5 :(得分:-1)

windows 上更喜欢使用:require_once __DIR__.'/database.php';require_once __DIR__.'/parent.php

答案 6 :(得分:-1)

我使用 require_once 并且它成功运行