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

ego*_*rik 29 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

child1和child2类看起来像这样:

include 'parent.php';

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

    function useDb() {
        $this->db->some_db_operation();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

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

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

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

我该如何纠正?

M31*_*M31 32

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

"classes.php"

include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';
Run Code Online (Sandbox Code Playgroud)

那么你只需要:

require_once('classes.php');
Run Code Online (Sandbox Code Playgroud)

  • 我在我的项目中到处都使用了 include_once ,但这种情况仍然发生。以前可以用 (2认同)

小智 10

尝试使用include_oncerequire_once代替includerequire


小智 5

include_once 或 require_once 的另一个选项是使用类自动加载。http://php.net/manual/en/language.oop5.autoload.php


pra*_*ram 5

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

include_once 'database.php';
Run Code Online (Sandbox Code Playgroud)

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

include_once 'parent.php';
Run Code Online (Sandbox Code Playgroud)