theseer/autoload

生成自动加载代码的工具和库。

资助包维护!
theseer

安装量: 167 786

依赖者: 14

建议者: 3

安全性: 0

星标: 385

关注者: 15

分支: 47

开放问题: 4

1.29.1 2024-04-29 19:12 UTC

README

PHP 自动加载构建器 CLI 工具 phpab 是一个命令行应用程序,用于自动化生成自动加载要求文件的过程,同时可以选择创建静态要求列表以及 Phar 归档。

功能

  • 一次性递归扫描多个目录,可选地跟踪符号链接、通配符或基于 composer.json
  • 缓存扫描结果
  • 基于模板的自动加载代码
  • 模板的自定义变量
  • 兼容 PHP 5.2 的自动加载器兼容模式
  • 大小写敏感以及不敏感的类名映射
  • Phar 生成,可选地压缩和 openssl 密钥签名
  • 静态要求列表生成
  • Opcache 缓存预热列表生成
  • 生成代码的 Linting

需求

  • PHP 5.3+ (运行时,开发/测试:7.2+)
  • Fileinfo (ext/fileinfo)
  • Tokenizer (ext/tokenizer)
  • 用于 PHAR 生成支持
    • ext/phar (启用写入:phar.readonly = Off)
    • ext/gzip (可选)
    • ext/bzip2 (可选)
    • ext/openssl (可选,仅用于 Phar 签名)

安装

可执行 PHAR

安装 phpab 的推荐方法是使用 phive

phive install phpab

手动安装

如果您没有安装 phive 或想手动安装,您可以从 发行版 标签下载 PHAR 归档。

请注意:在基于 Linux/Unix 的系统上,Phar 需要标记为可执行,以便直接执行

[theseer@rikka ~]$ chmod +x phpab*.phar

其他下载

使用方法

Usage: phpab [switches] <directory1|file1|/path/to/composer.json> [...<directoryN|fileN>]

  -i, --include       File pattern to include (default: *.php)
  -e, --exclude       File pattern to exclude

      --blacklist     Blacklist classname or namespace (wildcards supported)
      --whitelist     Whitelist classname or namespace (wildcards supported)

  -b, --basedir       Basedir for filepaths
  -t, --template      Path to code template to use

  -o, --output        Output file for generated code (default: STDOUT)
  
  -p, --phar          Create a phar archive (requires -o )
      --all           Include all files in given directory when creating a phar
      --alias         Specify explicit internal phar alias filename (default: output filename)
      --hash          Force given hash algorithm (SHA-1, SHA-256 or SHA-512) (requires -p, conflicts with --key)
      --bzip2         Compress phar archive using bzip2 (requires -p) (bzip2 required)
      --gzip          Compress phar archive using gzip (requires -p) (gzip required)
      --key           OpenSSL key file to use for signing phar archive (requires -p) (openssl required)

  -c, --compat        Generate PHP 5.2 compatible code
  -s, --static        Generate a static require file
  
  -w, --warm          Generate a static opcache warming file
      --reset         Add opcache reset call when generating opcache warming file

  -1, --prepend       Register as first autoloader (prepend to stack, default: append)
  -d, --no-exception  Do not throw exception on registration problem (default: throw exception)

  -n, --nolower       Do not lowercase classnames for case insensitivity

  -q, --quiet         Quiet mode, do not output any processing errors or information

      --cache <file>  Enable caching and set filename to use for cache storage

      --follow        Enables following symbolic links (not compatible with phar mode)
      --format        Dateformat string for timestamp
      --linebreak     Linebreak style (CR, CRLF or LF, default: LF)
      --indent        String used for indenting or number of spaces (default: 16 (compat 12) spaces)

      --tolerant      Ignore Class Redeclarations in the same file
      --once          Use require_once instead of require when creating a static require file

      --trusting      Do not check mimetype of files prior to parsing (default)
      --paranoid      Do check mimetype of files prior to parsing

      --var name=foo  Assign value 'foo' to variable 'name' to be used in (custom) templates

      --lint          Run lint on generated code and exit
      --lint-php      PHP binary to use for linting (default: /usr/bin/php or c:\php\php.exe)

  -h, --help          Prints this usage information
  -v, --version       Prints the version and exits

使用示例

[theseer@rikka ~]$ phpab -o src/autoload.php -b src composer.json

[theseer@rikka ~]$ phpab -o opcache_warming.php -w --reset src

[theseer@rikka ~]$ phpab -o src/autoload.inc.php src

[theseer@rikka ~]$ phpab -c -o src/autoload.inc.php src

[theseer@rikka ~]$ phpab -o src/core/autoload.inc.php -b src src

[theseer@rikka ~]$ phpab -p -o framework.phar -b src composer.json

[theseer@rikka ~]$ phpab -p -o framework.phar framework/src

[theseer@rikka ~]$ phpab -p -o framework.phar --bzip2 --key sign.key framework/src

[theseer@rikka ~]$ phpab -b . --tolerant -o zf1_autoload.php -e '*/Test/*' Zend

自动化

当使用 phpab 时,每次创建新类时都需要重新创建自动加载文件。这通常也发生在从仓库拉取或切换分支之后。通过在 .git/hooks/post-update 中放置 git post-checkout 钩子,这可以自动处理大多数情况。

基本示例

#!/bin/bash
phpab -c -o src/autoload.inc.php src

使用 ant build.xml 文件的示例。

#!/bin/bash
if [ -f build.xml ]; then
    ant -p | grep phpab > /dev/null

    if [ $? -eq 0 ]; then
        ant phpab > /dev/null &
    fi
fi

模板变量

生成的代码基于默认在 templates 子文件夹中提供的模板。模板引擎允许简单地替换基于名称的占位符。目前,只定义了一些默认变量,但 API 钩子/ CLI 参数可用于设置自定义变量。

已知变量包括

  • ___CREATED___ 设置为创建的时间戳,格式可以调整
  • ___CLASSLIST___ 以生成的映射形式找到的类列表
  • ___BASEDIR___ 如果设置了 Basedir,则将从文件路径中移除其值,并用 DIR 替换

仅用于 Phar 模式

  • ___PHAR___ 生成的 Phar 的文件名或当给定 --alias 时它的别名(见 src/templates/phar.php.tpl)

通过通过 CLI 传递 --var name=value 定义的自定义变量可以通过在前面和后面添加 ___ 来访问

  • ___name___ 将由 CLI 参数提供的值替换

变更日志

变更日志已移动到其自己的文档中 changelog