PHP:无法声明类,因为名称已在使用中
Posted
技术标签:
【中文标题】PHP:无法声明类,因为名称已在使用中【英文标题】:PHP: cannot declare class because the name is already in use 【发布时间】:2017-07-29 16:19:23 【问题描述】:我有 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.php
和 child2.php
类如下所示:
include 'parent.php';
class Child1 extends Parent
function __construct()
parent::__construct();
function useDb()
$this->db->some_db_operation();
问题
当我尝试在 somescript.php 中同时包含 child1 和 child2 时,它返回以下错误:
无法声明类数据库,因为该名称已在 database.php 在第 4 行 (这是包含单词 'class Database' 的行)
但如果我只包含一个文件(child1 或 child2),效果很好。
我该如何纠正?
【问题讨论】:
【参考方案1】:您想使用include_once() 或require_once()。另一种选择是创建一个附加文件,其中包含您的所有类以正确的顺序包含,这样他们就不需要自己调用包含:
“classes.php”
include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';
那么你只需要:
require_once('classes.php');
【讨论】:
我在项目中的任何地方都使用了 include_once,但仍然会发生这种情况。它曾经工作过 @Dan,您仍然需要确保包含的顺序正确,以便在定义类时已经包含父类。 这个答案应该被接受。解决问题,切入主题并提供示例。【参考方案2】:尝试使用include_once
或require_once
代替include
或require
【讨论】:
【参考方案3】:我之前遇到过这个问题,要解决这个问题, 只需确保:
-
您之前没有创建此类的实例
如果您从类方法调用它,请确保在您调用的类上设置了 __destruct。
我的问题(之前): 我有课:核心、路由器、权限和渲染 核心包含Router类,Router调用Permissions类,Router__destruct调用Render类,出现“Cannot declare class because the name is already in use”的错误。
解决方案: 我在 Permission 类上添加了 __destruct 并且 __destruct 是空的并且它是固定的......
【讨论】:
【参考方案4】:include_once 或 require_once 的另一个选项是使用类自动加载。 http://php.net/manual/en/language.oop5.autoload.php
【讨论】:
【参考方案5】:您应该使用 require_once 和 include_once。在parent.php里面使用
include_once 'database.php';
在child1.php和child2.php里面使用
include_once 'parent.php';
【讨论】:
【参考方案6】:Class Parent 不能被声明,因为它是 PHP 保留关键字,所以实际上它已经在使用中了
【讨论】:
我已将 ErrorController 类的名称从 'Error.php' 更改为 'ErrorHandler.php' 并修复了它。从 PHP 7 开始,错误类是保留关键字,因此已经在使用 [php.net/manual/de/class.error.php]以上是关于PHP:无法声明类,因为名称已在使用中的主要内容,如果未能解决你的问题,请参考以下文章
无法声明类 App\User,因为该名称已在我的浏览器中使用
以 Clover XML 格式生成代码覆盖率报告 ... PHP 致命错误:无法声明类 ...,因为名称已在
“无法声明类 App\Http\Controllers\category,因为该名称已在使用中”
(1/1) FatalErrorException 无法声明比特币类,因为该名称已在 easybitcoin.php 第 4 行中使用