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

PHP:无法声明类,因为该名称已在使用中,php,oop,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(); } } include 'parent.php'; class Ch

我有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();
        }
    }
    
    include 'parent.php';
    
    class Child1 extends Parent {
        function __construct() {
            parent::__construct();
        }
    
        function useDb() {
            $this->db->some_db_operation();
        }
    }
    
    child1.php
    child2.php
    类如下所示:

    include 'database.php';
    
    class Parent {
        public $db;
        function __construct() {
            $this->db = new Database();
        }
    }
    
    include 'parent.php';
    
    class Child1 extends Parent {
        function __construct() {
            parent::__construct();
        }
    
        function useDb() {
            $this->db->some_db_operation();
        }
    }
    
    问题

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

    无法声明类数据库,因为该名称已在中使用 第4行的database.php(这一行包含单词“class database”)

    但是,如果我只包含一个文件(child1或child2),它的效果会很好

    如何更正此错误?

    您想使用或。另一个选项是以正确的顺序创建一个包含所有类的附加文件,这样它们就不需要调用includes本身:

    “classes.php”

    那么你只需要:

    require_once('classes.php');
    

    尝试使用use
    include\u once
    require\u once
    而不是
    include
    require
    我以前遇到过这个问题,要解决这个问题, 只要确保:

  • 您以前没有创建此类的实例
  • 如果从类方法调用此函数,请确保在从中调用的类上设置了_析构函数
  • 我的问题(以前):
    我有类:核心、路由器、权限和渲染 核心包括路由器类,然后路由器调用权限类,然后路由器u destruct调用呈现类,出现错误“无法声明类,因为名称已在使用”

    解决方案:

    我在Permission类中添加了uu destruct,而u destruct是空的,它是固定的…

    另一个包含u once或要求once的选项是使用类自动加载

    您应该使用require\u一次,include\u一次。在parent.php内部使用

    include_once 'database.php';
    
    在child1.php和child2.php中使用

    include_once 'parent.php';
    

    无法声明类父级,因为它是PHP保留关键字,因此实际上它已经在windows上使用了。

    首选使用:
    require_once\u DIR\u.'/database.PHP'
    require\u once\uu DIR\uu.'/parent.php

    我的用户require\u once并且它成功地运行了

    我在我的项目中的任何地方都使用了include\u once,这种情况仍然存在。它过去是有用的before@Dan,您仍然需要确保包含的顺序正确,以便在定义类时已包含父类。应接受此答案。解决了这个问题,开门见山并提供了示例。我已经将ErrorController类的名称从“Error.php”更改为“ErrorHandler.php”,并对其进行了修复。由于PHP7,错误类是保留关键字,因此已在使用中[