PHP不仅仅是Web:为什么你的下一个CLI工具应该用PHP编写
当我们听到“PHP”时,第一反应是网站、WordPress和浏览器中无尽的echo。但PHP是开发者的瑞士军刀。它最被低估的功能之一就是能够创建完整的PHP CLI工具。是的,就是那些帮助自动化日常任务、解析日志、生成报告以及让DevOps工程师生活更轻松的控制台程序。
在本文中,我们不仅仅讨论理论。我们将从零开始编写几个真实的PHP控制台应用。您将学习如何处理命令行参数、为输出着色、显示进度条,甚至创建交互式菜单。文章结束时,您将拥有一个可以直接在项目中使用的现成模板。
为什么用PHP做CLI?3个有力论据
在深入代码之前,让我们先弄清楚为什么要在创建CLI工具时使用PHP。毕竟还有Python、Node.js、Go……
- 您已经了解PHP。如果您是PHP Web开发者,您无需学习新语法即可编写数据库备份或部署脚本。
- 统一的生态系统。您可以使用相同的库(通过Composer)、相同的ORM和相同的模板引擎。想要一个从数据库生成PDF报告的脚本?没问题。
- 开发速度。PHP脚本编写非常快。对于简单的工具来说,这是理想的选择——无需编译、无需配置环境,直接运行即可。
当然,对于高负载守护进程或复杂的系统工具,最好使用C或Rust。但对于90%的日常任务,PHP非常合适。
从零到第一个CLI工具:终端中的Hello, World!
让我们从最简单的开始。创建一个文件hello.php并写入:
#!/usr/bin/env php<?php
echo "你好,终端!";第一行是shebang。它告诉系统这个文件应该用PHP执行。没有它,您每次都需要输入php hello.php,而有它,只需./hello.php。
别忘了给文件执行权限:
chmod +x hello.php现在运行:
./hello.php恭喜!您刚刚创建了第一个PHP CLI工具。这非常简单,对吧?
处理参数:让工具变得有用
任何严肃的控制台程序都应该能够接受参数。PHP为此提供了两个超全局数组:$argv和$argc。
$argv— 参数数组。第一个元素是脚本名称。$argc— 参数数量。
让我们编写一个简单的计算器——将作为参数传递的两个数字相加。
PHP CLI简单计算器
#!/usr/bin/env php<?php
if ($argc !== 3) { echo "用法:{$argv[0]} <数字1> <数字2>"; exit(1);}
$a = (int)$argv[1];$b = (int)$argv[2];
echo "和:" . ($a + $b) . "";echo "差:" . ($a - $b) . "";echo "积:" . ($a * $b) . "";echo "商:" . ($a / $b) . "";运行:
./calc.php 10 5输出:
和:15差:5积:50商:2但这太原始了。在实际项目中,需要像git commit -m "message"这样的命名参数(标志)。为此,PHP提供了getopt()函数。
使用getopt()的命名参数
#!/usr/bin/env php<?php
$shortOptions = "u