致命错误:无法声明类

Mad*_*Lax 5 php

我无法理解为什么php会给我一个错误

"致命错误:无法声明类rex\builder\RexBuilder,因为该名称已在第12行的/var/www/site2.dev/App/rex/RexBuilder.php中使用"

RexBuilder是静态类,它只被调用一次.我对项目进行了搜索,不再使用同名的类.

    <?php

namespace rex\builder;

require_once 'Router.php';

use rex\router\Router;

error_reporting(E_ALL);
ini_set('display_errors', 1);

class RexBuilder {

    public static function collector($array) {
        $router = new Router();
        foreach ($array as $key => $val) {
            $router->get($val->getMethod(), $val->getInterfaces(), $val->getHandler());
        }
        $router->init();
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

在index.php中调用该类

RexBuilder::collector(array(
new BuildModel('POST', '/api/v1/user/register', new \api\register\Registration()),
new BuildModel('POST', '/api/v1/user/login', new \api\login\Login())));
Run Code Online (Sandbox Code Playgroud)

更多此类未使用

Dan*_*rom 7

由于use rex\router\Router;重复的类而引发错误.

在编写use namespace..它时意味着您可以直接进入该命名空间,就像它是您当前的命名空间一样


让我们来看看下一个代码:

我们将创建一个文件并声明它属于命名空间类\ a

//file: a.php
<?php

namespace classes\a;

class A{

}
Run Code Online (Sandbox Code Playgroud)

现在让我们创建另一个文件b.php(并声明它属于命名空间类\ b,但它对于该示例没有任何意义)

namespace classes\b;

require_once "a.php";

use classes\a; //Notice that I'm using this namespace, it means I can use it directly

class A{

}
Run Code Online (Sandbox Code Playgroud)

生成错误

致命错误:无法声明类类\ b\A,因为该名称已在使用中

我们需要解决方案:

首先:删除use标记并直接编写命名空间

class A{
    function __constructor(){
        $instance = new classes\a\A();
    }
}
Run Code Online (Sandbox Code Playgroud)

第二,给它别名

use classes\a as out_a;

class A{
    function __constructor(){
        $instance = new out_a\A();
    }
}
Run Code Online (Sandbox Code Playgroud)

对于您的代码,只需删除use或给它一个别名.