ryunosuke/functions


README

安装

{
    "require": {
        "ryunosuke/functions": "dev-master"
    }
}

用法

请参考 https://arima-ryunosuke.github.io/document/php-functions/ 以获取所有参考。更改点请参考 RELEASE.md

导入

require __DIR__ . '/vendor/autoload.php';

// グローバルへ展開
\ryunosuke\Functions\Transporter::importAsGlobal();
// 名前空間へ展開
\ryunosuke\Functions\Transporter::importAsNamespace();

每个函数前都会执行 assert。具体来说,有以下行为。

  • 未定义的
  • 已定义且为用户定义的
  • 已定义且为内置的则引发致命错误

这是为了满足以下行为。

  • 可能部分覆盖
    • 通过预先定义,可以在替换时跳过,从而实现替换
  • 可能新增加内置函数
    • 因为 !function_exists() 会引发错误,所以定义时引发致命错误会更安全

导出

如下所示,可以在指定命名空间中输出文件本身。这是主要的使用方法。

require __DIR__ . '/vendor/autoload.php';

// 任意の名前空間へ出力
file_put_contents('path/to/function.php', \ryunosuke\Functions\Transporter::exportNamespace('namespace'));

然后,可以在项目特有的 include.php 等文件中读取输出的文件即可。这种方法的优点是可以更改命名空间,并且可以通过将文件输出到管理下的目录来定制。此外,由于与包的相关性被切断,原则上不会发生冲突。

通过指定第二个参数,则只输出指定的函数及其依赖项。

require __DIR__ . '/vendor/autoload.php';

// 'funcA', 'funcB' だけを出力
file_put_contents('path/to/function.php', \ryunosuke\Functions\Transporter::exportNamespace('namespace', ['funcA', 'funcB']));

此外,通过给第二个参数提供文件名或目录名,可以将它们视为 PHP 文件,并实际输出正在使用的函数。

require __DIR__ . '/vendor/autoload.php';

// /path/to/project 内で使われている関数だけを出力
file_put_contents('path/to/function.php', \ryunosuke\Functions\Transporter::exportNamespace('namespace', '/path/to/project'));

会解决依赖关系,例如,如果 funcAfuncB 依赖于 funcC,则也会输出 funcC。用途是用于复制一些简短的代码片段(不需要整体代码,只需要特定部分)。

上述内容在 composer.jsonautoload 中有相应的自动输出命令。

vendor/bin/export-function
# composer exec export-function

但是,大多数是内部用途。

使用 exportClass 可以以单例静态类的方式输出。

require __DIR__ . '/vendor/autoload.php';

// name\space\Utils に単一クラスとして出力
file_put_contents('src/Utils.php', \ryunosuke\Functions\Transporter::exportNamespace('name\\space\\Utils', ['吐き出したい関数など']));

用途是通常的 Utils 静态类。但是,大多数是内部用途。

开发

基本上只接触 src/Package 以下。其他类似文件是自动生成的。

由于相同的函数分散在各个地方,所以无法充分利用 IDE 的跳转功能。在 phpstorm 等中,可以将 'include' 排除。

以下定义了 composer subcommand。

  • composer build
    • 执行所有 export、test、document。
  • composer export
    • 从 src/Package 生成自动文件。
  • composer test
    • 执行 PHPUnit。