krak / php-inc
PHP 自动包含文件生成器
Requires
- php: ^7.1
- composer-plugin-api: ^1.1 || ^2.0
Requires (Dev)
- composer/composer: ^2.0
- peridot-php/leo: ^1.6
- peridot-php/peridot: ^1.19
README
Php inc 是一个 composer 插件,用于自动将某些文件包含到 composer 的 autoload
和 autoload-dev
files
配置中。给定一组文件匹配器,在 dump-autoload
事件上,php-inc 将自动将所有匹配的文件包含到导出的自动加载文件中。
这解决了当您想要包含包含函数或多个类但不想不断更新 composer 自动加载文件配置的问题,当开始包含更多文件时,这可能会变得难以处理。
安装
使用 composer 在 krak/php-inc
下安装
使用方法
使用默认配置,只需将 src
或 tests
目录中以小写字母开头的任何文件命名为 .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可以极大地减轻这个问题,但当你开始在代码库中散布要包含的文件时,这是一个需要考虑的因素。