我有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),那么效果很好。
我该如何纠正?
答案 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_once
或require_once
代替include
或require
答案 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)
我以前有这个问题,并且要解决, 只要确保:
我的问题(之前):
我上过课:核心,路由器,权限和渲染
核心包含的是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 并且它成功运行