【问题标题】:How to include / require `use` operator statements?如何包含/需要`use`操作符语句?
【发布时间】:2017-07-24 21:39:19
【问题描述】:

我动态生成我的使用语句并尝试包含它们。

use.php(路径:/App/Test/Use/use.php)

<?php
    use App\Http\Utility\GeneralUtility;
    use App\Models\Project;
    use App\Http\Selenium;
?>

PlayController.php(路径:/App/Http/Controllers/PlayController.php)

<?php

    namespace App\Http\Controllers;
    require app_path() . '\Projects\Test\Use\use.php';
    ...

但是,如果我尝试在我的控制器中使用包含/必需的类,那么我会得到一些类丢失的信息。例如

FatalThrowableError in PlayController.php line 30:
Class 'App\Http\Controllers\Selenium' not found

如果我不使用require 将它们手动写入控制器,当然可以:

<?php
    namespace App\Http\Controllers;

    use App\Http\Utility\GeneralUtility;
    use App\Models\Project;
    use App\Http\Selenium;

    ...

那么,如果我包含/需要它们,为什么它不起作用?

【问题讨论】:

  • 不,如果我在类上方手动编写 use 语句,它会起作用。所以这个错误一定和include/require有关。
  • 他们都给出那个错误,还是只给出那个?
  • 这可能是一个愚蠢的评论,但可能是“使用”是使用类来制作 PHP,并且包含只是为了包含它们。
  • 是的,我已经测试过了。我相信这是不可能的......虽然我不是这里最好的专家,但我会尝试找到关于此的文档报价。
  • 是的,这听起来有些不可能……让我考虑一下,我可能会想出点什么。

标签: php laravel class namespaces


【解决方案1】:

不可能您正在尝试做的事情。 这是 PHP 手册中的 文档

注意:导入规则是基于每个文件的,这意味着包含的文件将继承父文件的导入规则。

来源来自here,完整的文档链接是here

【讨论】:

    【解决方案2】:

    使用是在编译时完成的,而在运行时包含,所以这是不可能的。 但是您可以做的是,在执行脚本之前使用 PHP-Parser 之类的东西来替换包含。

    【讨论】:

    • 是的,这是可能的。干净吗? 绝对不是..这是我想的唯一方法..
    • 我希望他们将来会实现一个功能,以便可以包含使用语句,这将带来很多新的可能性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    相关资源
    最近更新 更多