krak/php-inc

PHP 自动包含文件生成器

安装次数: 7,743

依赖者: 4

建议者: 0

安全性: 0

星标: 5

关注者: 3

分支: 1

公开问题: 1

类型:composer-plugin

v0.2.4 2021-02-11 22:09 UTC

This package is auto-updated.

Last update: 2024-09-12 06:02:40 UTC


README

PHP Requirements

Php inc 是一个 composer 插件,用于自动将某些文件包含到 composer 的 autoloadautoload-dev files 配置中。给定一组文件匹配器,在 dump-autoload 事件上,php-inc 将自动将所有匹配的文件包含到导出的自动加载文件中。

这解决了当您想要包含包含函数或多个类但不想不断更新 composer 自动加载文件配置的问题,当开始包含更多文件时,这可能会变得难以处理。

安装

使用 composer 在 krak/php-inc 下安装

使用方法

使用默认配置,只需将 srctests 目录中以小写字母开头的任何文件命名为 .php 扩展名,当触发 composer 的 dump-autoload 事件时,它将自动包含到导出的自动加载文件中。这发生在安装、更新或执行 dump-autoload 命令时。

安装插件后,composer 插件会自动加载,所以在大多数情况下,您不需要做任何事情来让文件自动包含。但是,如果您添加文件并希望立即在开发期间包含它们,您可以运行 composer dump-autoload 以确保它们被包含。

配置

以下是一个默认配置示例

{
  "extra": {
    "php-inc": {
      "src-path": "src",
      "test-path": "tests",
      "matches": {
        "type": "and",
        "matches": [
          {"type":  "ext", "exts":  ["php"]},
          {"type":  "lowerCase"},
          {"type":  "excludePath", "path":  "@.*/(Resources|Tests)/.*@"}
        ]
      },
      "matches-dev-src": {
        "type": "and",
        "matches": [
          {"type":  "ext", "exts":  ["php"]},
          {"type":  "lowerCase"},
          {"type":  "includePath", "path":  "@.*/Tests/.*@"},
          {"type":  "excludePath", "path":  "@.*/Tests/.*/Fixtures/.*@"}
        ]
      },
      "matches-dev-test": {
        "type": "and",
        "matches": [
          {"type":  "ext", "exts":  ["php"]},
          {"type":  "lowerCase"},
          {"type":  "excludePath", "path":  "@.*/Fixtures/.*@"}
        ]
      }
    }
  }
}

让我们逐个解释每个部分的意义和指向的内容。

src-path

src-path 将确定搜索自动加载文件的位置,即您的源代码路径。

如果您使用的是标准的 Laravel 文件结构,您需要将 src-path 更改为 app 而不是 src

test-path

test-path 将确定搜索自动加载-dev 文件的位置,即您的测试代码路径。

matches

matches 可以是任何配置的匹配层次结构,以确定如何搜索 src 文件夹以包含到 autoload.files 中的文件。默认配置确保所有以小写字母开头的、具有 php 扩展名且不在 Resources 或 Tests 目录中的文件都将包含在 autoload.files composer 配置中。

matches-dev-src

matches-dev-src 可以是任何配置的匹配层次结构,以确定如何搜索 src 文件夹以包含到 autoload-dev.files 中的文件。默认配置确保所有以小写字母开头的、具有 php 扩展名且在 Tests 目录中且不在 Fixtures 目录中的文件都将包含在 autoload-dev.files composer 配置中。

matches-dev-test

matches-dev-test 可以是任何配置的匹配层次结构,以确定如何搜索测试文件夹以包含到 autoload-dev.files 中的文件。默认配置确保所有以小写字母开头的、具有 php 扩展名且不在 Fixtures 目录中的文件都将包含在 autoload-dev.files composer 配置中。

调试

如果您想知道哪些文件被包含,只需运行 composer dump-autoload -v 并查看 php-inc 输出即可查看哪些文件与 composer 文件定义合并。

管理依赖项

在使用过程中,可能会遇到需要先加载一个文件再加载另一个文件的情况。如果遇到这种情况,目前我找到的最佳解决方案是在这些文件名前加上一个下划线_,并创建一个名为inc.php的新文件,以正确的顺序加载它们。

例如

src/a.php
src/b.php

a.php依赖于首先加载b.php。为了强制执行加载顺序,我们需要进行以下更改

src/_a.php
src/_b.php
src/inc.php

其中inc.php如下

<?php

require_once __DIR__ . '/_b.php';
require_once __DIR__ . '/_a.php';

当你运行composer dump-autoload时,只有inc.php将被包含,并确保正确地包含这些文件。

这有什么用呢?

https://nikic.github.io/2012/08/10/Are-PHP-developers-functophobic.html

在php没有为函数自动加载提供规范之前,在psr-4代码库中创建和使用标准函数是繁琐的,尤其是在使用自动加载的类时的简单性相比。大多数开发者会放弃使用函数,而是创建具有静态函数的抽象类来绕过自动加载的限制,而不是在composer自动加载部分手动注册单个文件。

但这不仅对函数有用。还有许多情况,将多个定义放在一起而不是拆分成多个文件,更有意义,这样不会使文件系统变得杂乱。

这个插件试图帮助使用composer的php开发者能够

缺点

自动包括composer自动加载文件部分中的php文件的主要缺点是,这些文件将在composer加载器加载时被包含。在大型项目中,如果你正在加载只在某些不太频繁的执行路径中需要的文件,这可能会成为一个问题。

Opcache可以极大地减轻这个问题,但当你开始在代码库中散布要包含的文件时,这是一个需要考虑的因素。