PHP-Console-Color 使用指南:在 PHP 中轻松创建彩色控制台输出

发布时间:2026/10/15 2:24:23
PHP-Console-Color 使用指南:在 PHP 中轻松创建彩色控制台输出 开发工具【免费下载链接】PHP-Console-ColorSimple library for creating colored console ouput项目地址https://gitcode.com/gh_mirrors/ph/PHP-Console-Color点击查看免费下载PHP-Console-Color 是一个专注于「彩色控制台输出」的轻量级 PHP 库核心描述只有一句话——Simple library for creating colored console output全部能力封装在JakubOnderka\PhpConsoleColor\ConsoleColor一个类中。本文以仓库 README.md 为骨架结合 example.php 的使用流程、src/ConsoleColor.php 的源码实现与 tests/ConsoleColorTest.php 的测试用例完整讲解安装方式、全部可用样式与 256 色扩展、自定义主题、平台检测原理与强制输出等实战要点读完即可在自己项目中直接落地彩色 CLI 输出。项目定位为控制台输出上色的轻量级 PHP 库根据 README.md 的说明本项目的定位是「一个用于创建彩色控制台输出的简单库」。它的使用入口非常明确README 直接引导读者查看 example.php 来学习用法即「看示例即可上手」。从 composer.json 可以进一步确认项目的基本事实包名jakub-onderka/php-console-color许可证BSD-2-ClausePHP 版本要求 5.4.0兼容性较广自动加载PSR-4命名空间JakubOnderka\PhpConsoleColor\映射到src/目录核心类只有两个——ConsoleColor.php 和 InvalidStyleException.php维护状态composer.json中声明了abandoned: php-parallel-lint/php-console-colorREADME 也明确标注This repository is abandoned。这意味着官方建议使用替代包php-parallel-lint/php-console-color本文只转述包名读者可在 Packagist 检索。如果项目仍在使用旧版本本仓库的实现细节与 API 完全可供参考功能是自洽完整的。另外README 顶部还嵌有 Travis CI 构建状态徽章并配有一张 Windows 10 下的实际运行效果截图图中展示了样式名自着色与 256 色色板输出效果验证了「彩色输出在 Windows 终端同样可用」。安装与引入由于包已标记 abandoned正式新项目建议直接依赖替代包php-parallel-lint/php-console-color若因历史项目锁定等原因必须使用本版本可按常规方式安装composer require jakub-onderka/php-console-color安装完成后通过 Composer 生成的 autoloader 引入即可example.php 中正是这样做的?php $loader require_once __DIR__ . /vendor/autoload.php; $consoleColor new JakubOnderka\PhpConsoleColor\ConsoleColor();核心类ConsoleColor位于JakubOnderka\PhpConsoleColor命名空间下对应 composer.json 中的 PSR-4 映射构造函数会自动探测当前终端是否支持颜色详见后文「平台检测」一节所以new ConsoleColor()之后无需任何初始化即可直接使用。快速上手example.php 完整流程拆解example.php 是官方指定的唯一使用示例全流程只有三条核心 APIisSupported()、are256ColorsSupported()与apply()。完整代码如下含逐行中文注释?php $loader require_once __DIR__ . /vendor/autoload.php; $consoleColor new JakubOnderka\PhpConsoleColor\ConsoleColor(); // 1. 当前终端是否支持 ANSI 颜色Windows / Unix 各自探测 echo Colors are supported: . ($consoleColor-isSupported() ? Yes : No) . \n; // 2. 是否支持 256 色扩展 echo 256 colors are supported: . ($consoleColor-are256ColorsSupported() ? Yes : No) . \n\n; // 3. 支持颜色时遍历所有内置样式用该样式名本身作为文本进行着色演示 if ($consoleColor-isSupported()) { foreach ($consoleColor-getPossibleStyles() as $style) { echo $consoleColor-apply($style, $style) . \n; } } echo \n; // 4. 支持 256 色时分别打印 1~255 号前景色与背景色色板 if ($consoleColor-are256ColorsSupported()) { echo Foreground colors:\n; for ($i 1; $i 255; $i) { echo $consoleColor-apply(color_$i, str_pad($i, 6, , STR_PAD_BOTH)); if ($i % 15 0) { // 每 15 个换行 echo \n; } } echo \nBackground colors:\n; for ($i 1; $i 255; $i) { echo $consoleColor-apply(bg_color_$i, str_pad($i, 6, , STR_PAD_BOTH)); if ($i % 15 0) { echo \n; } } echo \n; }这段示例揭示了该库的典型使用模式先探测后使用isSupported()为false时apply()会直接原样返回文本不产生任何转义序列因此「不支持颜色的终端上输出也不会出现乱码」是库的默认安全行为样式名即 API样式以字符串形式传入apply($style, $text)getPossibleStyles()可以拿到全部内置样式名256 色采用命名约定前景色写作color_N背景色写作bg_color_NN取值范围 1~255打印色板是天然的自测手段循环调用apply()就能快速验证终端能力与输出效果。内置样式与颜色全集对照表getPossibleStyles()返回的样式名来源于 src/ConsoleColor.php 中定义的$styles属性。下表为全部内置样式名及其对应的 ANSI 转义码可直接复制使用文本修饰样式样式名ANSI 码说明none无不产生任何转义序列bold1加粗dark2变暗弱化italic3斜体underline4下划线blink5闪烁reverse7反显前景/背景互换concealed8隐藏前景色16 色样式名ANSI 码样式名ANSI 码default39dark_gray90black30light_red91red31light_green92green32light_yellow93yellow33light_blue94blue34light_magenta95magenta35light_cyan96cyan36white97light_gray37背景色16 色样式名ANSI 码样式名ANSI 码bg_default49bg_dark_gray100bg_black40bg_light_red101bg_red41bg_light_green102bg_green42bg_light_yellow103bg_yellow43bg_light_blue104bg_blue44bg_light_magenta105bg_magenta45bg_light_cyan106bg_cyan46bg_white107bg_light_gray47可以看到除none外所有样式都对应标准 ANSI SGRSelect Graphic Rendition参数这正是该库「简单」的体现不做终端抽象只做样式名到 ANSI 码的映射与组合。256 色扩展color_N与bg_color_N除了上述 16 色库还支持标准的 256 色模式。样式名采用正则~^(bg_)?color_([0-9]{1,3})$~见 src/ConsoleColor.php进行解析前景色color_255→ ANSI 序列38;5;255背景色bg_color_255→ ANSI 序列48;5;255。由 src/ConsoleColor.php 中styleSequence()的实现可知当传入的样式不在内置$styles表中时会先尝试匹配 256 色正则匹配成功则按$type;5;$value拼接序列——38/48分别代表前景/背景5表示 256 色模式$value为颜色编号。两个使用要点编号范围 1~255正则[0-9]{1,3}限定最多 3 位数字color_255合法而color_21344 位会匹配失败直接抛出InvalidStyleException——这一行为在 tests/ConsoleColorTest.php 的testApplyInvalid256Color中明确验证。依赖终端能力styleSequence()中会先调用are256ColorsSupported()如果终端不支持 256 色该样式将被跳过返回null并在后续被过滤掉退化为无颜色输出。因此 256 色功能在使用前应通过are256ColorsSupported()判断example.php 正是先探测再打印色板。自定义主题Theme系统如果不想每次都用apply(red, ...)这样的原始样式名库提供了主题机制可以把多个样式打包成一个有语义的名字。相关 API 全部实现在 src/ConsoleColor.phpaddTheme($name, $styles)新增一个主题$styles可为单个样式字符串或样式数组内部会逐一校验样式合法性非法样式会抛出InvalidStyleExceptionsetThemes(array $themes)一次性覆盖全部主题先清空再逐个addThemegetThemes()获取全部主题hasTheme($name)判断主题是否存在removeTheme($name)删除主题。示例$consoleColor-addTheme(error, array(white, bg_red, bold)); $consoleColor-addTheme(success, green); // apply 时直接使用主题名主题与普通样式还可以混用 echo $consoleColor-apply(error, Something went wrong!) . \n; echo $consoleColor-apply(array(success, underline), All done.) . \n;主题在apply()中的处理逻辑见 src/ConsoleColor.php遍历样式数组时若样式名命中了$themes中的主题则通过themeSequence()展开为该主题下的全部底层样式序列。例如主题bold_dark[bold, dark]展开后即\033[1;2m...\033[0m与直接apply([bold, dark], ...)效果一致。测试 tests/ConsoleColorTest.php 的testSetOwnTheme、testAddOwnTheme、testAddOwnThemeArray、testOwnWithStyle分别覆盖了设置主题、字符串/数组形式添加主题以及「主题 普通样式混用」四种场景。apply() 核心流程与输出原理apply($style, $text)是整个库的心脏其完整逻辑见 src/ConsoleColor.php分为五步能力门控若未强制样式setForceStyle(false)且终端不支持颜色直接原样返回$text参数归一化样式字符串会先转成单元素数组类型非法非字符串/数组抛出\InvalidArgumentException样式解析逐个解析命中主题则展开主题序列命中内置样式或 256 色正则则取对应序列否则抛出InvalidStyleException过滤空序列array_filter去掉null如none或 256 色不被支持时若最终没有可用序列则返回原文包装输出所有序列以;连接用escSequence()包成\033[{值}m最后追加\033[0mRESET_STYLE复位。由此可知最终的 ANSI 结构是\033[code1;code2;...m 文本 \033[0m。组合样式时序列按传入顺序拼接例如apply([bold, dark], text)输出\033[1;2mtext\033[0m见testBoldAndDark256 色前景 背景组合输出\033[38;5;200;48;5;255mtext\033[0m见test256ColorForegroundAndBackground。异常体系方面InvalidStyleException.php 继承自\Exception构造时接收样式名并生成消息Invalid style {name}.非法参数类型则抛出标准\InvalidArgumentException。两种异常在 tests/ConsoleColorTest.php 中都有对应的预期异常测试。平台检测何时认为终端支持颜色isSupported()与are256ColorsSupported()是决定是否输出转义序列的前置判断其实现src/ConsoleColor.php按操作系统区分探测策略方法WindowsDIRECTORY_SEPARATOR \\Unix/Linux/macOSisSupported()① 存在sapi_windows_vt100_support()且对STDOUT返回真② 或环境变量ANSICON已设置③ 或ConEmuANSI等于ON存在posix_isatty函数且posix_isatty(STDOUT)为真are256ColorsSupported()存在sapi_windows_vt100_support()且对STDOUT返回真环境变量TERM中包含子串256color几个值得注意的实现细节ConsoleColor构造函数会预先调用一次isSupported()并把结果缓存到$isSupported属性src/ConsoleColor.php运行时apply()每次读取的是缓存值posix_isatty判断的是标准输出是否连接到终端tty因此把输出重定向到文件或管道时Unix 下通常会被判定为「不支持颜色」避免把 ANSI 转义码写进日志文件Windows 下sapi_windows_vt100_support(STDOUT)是 PHP 7.1 提供的 VT100 支持探测ANSICON/ConEmuANSI则是为旧终端模拟器如 ANSICON、ConEmu保留的兼容分支。强制样式输出setForceStyle()有些场景下即使终端被判定为不支持颜色也需要强制输出转义序列——例如把彩色日志通过管道交给 CI 系统或写入需要保留 ANSI 码的文件。这时可使用setForceStyle(true)$consoleColor-setForceStyle(true); // 即使 isSupported() 返回 false也会输出 \033[1mtext\033[0m echo $consoleColor-apply(bold, text);对应实现见 src/ConsoleColor.phpapply()中的第一道门控是「!isStyleForced() !isSupported()」——只要强制开启能力检测结果即被绕过。测试 tests/ConsoleColorTest.php 的testBoldColorsAreNotSupportedButAreForced专门验证了「不支持但强制」时仍输出完整转义序列testForceStyle则验证了开关的存取。测试与验证方式仓库使用 PHPUnit 作为测试框架配置见 phpunit.xmlbootstrap 为./vendor/autoload.php测试目录为tests按*Test.php后缀发现测试类代码覆盖率统计会忽略vendor目录。安装开发依赖后即可运行全部测试composer install vendor/bin/phpunittests/ConsoleColorTest.php 共 21 个测试方法覆盖了样式应用、组合样式、256 色、主题管理、能力探测、强制样式与异常路径等全部核心行为。值得留意的是测试通过继承ConsoleColor并覆写isSupported()/are256ColorsSupported()构造了ConsoleColorWithForceSupport子类见文件头部从而绕开真实终端环境、在确定条件下断言输出序列——这种「依赖注入 覆写探测点」的思路也适合参考迁移到自己的项目。使用注意事项与替代方案综合 README 与 composer.json 的信息使用本包时有几点需要留意仓库已停止维护README 明确标注 abandonedcomposer.json的abandoned字段指向替代包php-parallel-lint/php-console-color。Packagist 在安装时也会给出弃用提示新项目应直接使用替代包本仓库可作为实现与 API 的参考资料PHP 版本require为 5.4.0在较新的 PHP 版本上运行老代码通常没有问题但需自行验证无颜色时的默认行为是安全的不支持的终端上apply()返回原文不会出现乱码需要保留 ANSI 码时再考虑setForceStyle(true)样式名区分大小写内置样式均为小写命名如light_red、bg_light_gray命名空间JakubOnderka\PhpConsoleColor中的类名首字母大写使用时注意精确匹配否则会触发InvalidStyleException。总而言之PHP-Console-Color 用不到 300 行源码解决了一个小而实用的痛点把「给控制台文本上色」封装成apply(样式, 文本)这一简单调用并提供完整的样式表、256 色扩展与主题机制。理解它的源码与测试不仅可以直接掌握 ANSI 转义序列在 PHP 中的组合技巧也能为后续平滑迁移到官方推荐的替代包打好基础。赞分享开发工具【免费下载链接】PHP-Console-ColorSimple library for creating colored console ouput项目地址https://gitcode.com/gh_mirrors/ph/PHP-Console-Color点击查看免费下载相关推荐GLM-4.1V-9B-Thinking-8bit性能测试M2 Pro上15.8 tok/s解码速度与11.89GB内存占用实测GLM 4.1V 9B Thinking 8bit性能测试M2 Pro上15.8 tok/s解码速度与11.89GB内存占用实测 GLM 4.1V 9B ThPHP Console Color终端彩色输出的终极指南与最佳实践PHP Console Color终端彩色输出的终极指南与最佳实践 PHP Console Color是一个简单而强大的PHP库专门用于在控制台终端中创建丰开发工具Polyglot-Ko-3.8B-Total推理代码详解使用OpenMind库实现高效文本生成Polyglot Ko 3.8B Total推理代码详解使用OpenMind库实现高效文本生成 想要快速上手韩国语大语言模型polyglot ko 3.8b上一篇BentoML 类型存根工程实践typings 目录的构建、验证与第三方库 .pyi 文件贡献流程下一篇Obsidian Banners插件终极指南如何为你的笔记添加精美横幅图片创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考