nickolasburr/ezimports

此包已 废弃 且不再维护。未建议替代包。

在运行时注册PHP导入。

dev-master 2020-02-27 21:17 UTC

This package is auto-updated.

Last update: 2022-05-28 02:12:28 UTC


README

通过JSON注册PHP导入。

目录

安装

composer require nickolasburr/ezimports

配置

导入JSON文件应包含一个对象数组,每个对象表示一个实体及其后续导入。对于每个实体对象,应指定以下属性

  • class:类、接口或特质的全限定类名。
  • imports:导入对象数组。
    • use:要导入的类、接口或特质的全限定类名。
    • as:[可选] 替代短名称的别名。默认为短名称。

常量

在搜索之前,ezimports会查找以下常量

  • EZIMPORTS_MODULE_PATH:ezimports模块目录的路径。默认为vendor/nickolasburr/ezimports
  • <VENDOR>_<MODULE>_IMPORTS_FILE_NAME:导入文件的基本名称。默认为imports.json
  • <VENDOR>_<MODULE>_IMPORTS_FILE_PATH:导入文件路径。默认为vendor/<VENDOR>/<MODULE>/imports.json

使用

而不是静态包含导入

<?php

namespace Example;

use Dictionary\WordInterface;
use External\Entity;
use Somewhere\Outside\ThisNamespace as Outsider;

class Name implements WordInterface
{
}

使用FQCN和模块名称调用include_imports

<?php

declare(strict_types=1);

namespace Example;

\include_imports(Name::class, '<VENDOR>/<MODULE>');

class Name implements WordInterface
{
}

接下来,将导入添加到模块根目录中的imports.json

[
  {
    "class": "Example\\Name",
    "imports": [
      {
        "use": "Dictionary\\WordInterface"
      },
      {
        "use": "External\\Entity"
      },
      {
        "use": "Somewhere\\Outside\\ThisNamespace",
        "as": "Outsider"
      }
    ]
  }
]

或者,通过<VENDOR>_<MODULE>_IMPORTS_FILE_PATH指定路径。最简单的方法是为模块添加一个引导文件,它可以在加载时首先被加载。

<?php
/**
 * bootstrap.php
 *
 * As an example, assume the module is
 * named 'nickolasburr/testmodule'.
 */

if (!defined('NICKOLASBURR_TESTMODULE_IMPORTS_FILE_PATH')) {
    define('NICKOLASBURR_TESTMODULE_IMPORTS_FILE_PATH', '/path/to/module/imports.json');
}

优点

  • 减少PHP源文件的SLOC(源代码行数)
  • 通过JSON映射依赖关系,而不是解析PHP文件

注意事项

就像其他任何东西一样,它有其权衡之处,例如

  • 性能较差(目前没有正式的基准测试)
  • 安全性较差(但如果没有管理好,则不是不安全的)

实际上,可能最好是坚持使用静态导入。