当前位置: 首页 > news >正文

5分钟上手psr/clock:从composer安装到第一个now()调用的快速教程

5分钟上手psr/clock:从composer安装到第一个now()调用的快速教程

【免费下载链接】clockPSR-20 repository项目地址: https://gitcode.com/gh_mirrors/clo/clock

psr/clock 是 PSR-20 官方标准库,提供统一的时钟读取接口ClockInterface。本文带你用 5 分钟完成 composer 安装,读懂唯一的方法now(),并写出第一个获取当前时间的调用,彻底告别 PHP 项目中"时间不好测"的烦恼。

为什么需要 psr/clock?

在写 PHP 业务代码时,"获取当前时间"看似简单,却藏着两个经典痛点:

  • 测试困难:代码里到处散落new DateTimeImmutable(),单元测试想固定"当前时间"只能依赖系统时间,结果不可控;
  • 格式混乱:有的地方返回字符串,有的地方返回DateTime,团队协作时语义不统一。

psr/clock 给出的答案只有一个:一个极简接口。你的业务类只依赖ClockInterface,不关心时间从哪来;测试时再注入一个"假时钟",一切迎刃而解。

💡 注意:psr/clock本身不是一个时钟,它只定义接口(这是 README.md 中特别强调的一点),真正干活的是社区的各种时钟实现。

30秒完成 composer 安装

前提条件:PHP^7.0 || ^8.0(见 composer.json 的require段),任意主流 PHP 版本均可。

在你的项目根目录执行:

composer require psr/clock

执行完毕后,接口文件会自动出现在vendor/psr/clock/src/下,命名空间按 PSR-4 映射为Psr\Clock\

如果你需要直接拉取仓库源码研究,可以执行:

git clone https://gitcode.com/gh_mirrors/clo/clock

认识核心文件:一行方法的 ClockInterface

整个库的核心只有一个接口文件src/ClockInterface.php,全部逻辑如下:

namespace Psr\Clock; use DateTimeImmutable; interface ClockInterface { /** * Returns the current time as a DateTimeImmutable Object */ public function now(): DateTimeImmutable; }

记住两个关键点即可:

要素内容
唯一方法now()
固定返回类型DateTimeImmutable(不可变时间对象)

就这一个方法,没有时区参数、没有格式化参数——PSR-20 的设计哲学就是"少即是多"。

写出第一个 now() 调用

以下示例与官方 README.md 中的 Usage 章节一致,演示了推荐的构造器注入写法:

<?php use Psr\Clock\ClockInterface; class Foo { private ClockInterface $clock; public function __construct(ClockInterface $clock) { $this->clock = $clock; } public function doSomething() { /** @var DateTimeImmutable $currentDateAndTime */ $currentDateAndTime = $this->clock->now(); // do something useful with that information } }

三步理解这段代码:

  1. Foo不直接取时间,而是依赖注入一个ClockInterface
  2. 调用$this->clock->now()拿到DateTimeImmutable类型的当前时间;
  3. 依赖容器或工厂决定注入哪个实现——业务代码对具体实现零感知。

选一个时钟实现(implementation)

装了 psr/clock 后,还需给Foo注入一个具体实现。在 Packagist 上搜索psr/clock-implementation关键字,可找到所有声明了该标签的包,挑选一个composer require即可,例如常见的symfony/clocklaravel/clock风格实现,均实现了Psr\Clock\ClockInterface

自己动手实现一个时钟?

如果你要发布自己的时钟包,只需做两件事:

  1. 让类implements \Psr\Clock\ClockInterface,并在now()中返回DateTimeImmutable
  2. 在包的composer.json中声明:
{ "provide": { "psr/clock-implementation": "1.0" } }

这样依赖它的项目才能按标准发现你的实现。

常见问题 FAQ

Q:psr/clock 能直接new出来用吗?不能。它是纯接口包,没有任何类实现,必须搭配一个 implementation 使用。

Q:支持哪些 PHP 版本?^7.0 || ^8.0,即 PHP 7.0 及以上全系列。

Q:和直接调用date('Y-m-d')有什么区别?now()强制返回不可变的DateTimeImmutable对象,类型安全、可注入、可测试,是框架与中间件之间交换时间的标准载体。

Q:项目版本有哪些节点?可查看 CHANGELOG.md:0.1.0为首发版本,1.0.0是 PSR-20 被正式接纳后的首个稳定版。

总结:5分钟回顾

  • composer require psr/clock完成安装,PHP 7.0+ 即可
  • ✅ 核心接口src/ClockInterface.php只有一个方法:now(): DateTimeImmutable
  • ✅ 业务代码通过构造器注入ClockInterface,测试时换假时钟即可
  • ✅ 搭配任意psr/clock-implementation实现包,就能在真实项目中跑起来

从安装到第一个now()调用,你只用了 5 分钟。接下来,试着把手头项目里散落的new DateTimeImmutable()全部换成注入的时钟,你会体验到"时间可控"的爽快感。

【免费下载链接】clockPSR-20 repository项目地址: https://gitcode.com/gh_mirrors/clo/clock

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4226291.html

相关文章:

  • IntelliJ IDEA + phpStudy + ApiPost断点调试
  • 部署 FN-DSA 前:你必须了解的风险与权衡
  • 2026实测!梦琪科技拨号VPS排行,这3款性价比封神
  • 多模态模型也能当纯文本 LLM:InternVL3-2B-hf 无图文本生成快速入门
  • 公司电脑权限怎么管理?从账号、文件到软件,一套权限管理思路讲清楚
  • Status 拆解:19 天百万用户的 AI 社交模拟器如何炼成
  • Video2X AI 视频放大与补帧完整入门指南:从 480p 到 4K 成片
  • 华为MetaERP # EBS → Fusion BC 预算模块【业务规则对齐实施指南】定位:迁移蓝图「业务规则映射章节」标准内容,承接主数据映射、余额迁移、预算校验逻辑迁移。> > 核心结
  • PDF补丁丁:一个免费的PDF工具箱,搞定书签、合并、提图等8类编辑任务
  • 如何在React Native中使用react-timer-hook?移动App倒计时与秒表组件跨平台实战教程
  • 自己设计一道数独:LibreSudoku自定义出题功能完整流程演示
  • 基于SpringBoot的网购优选服务系统设计网站(源码+lw+部署文档+讲解等)
  • 反向工程nest-router源码:forRoutes背后的MODULE_PATH元数据魔法
  • 基于SpringBoot的甜品店在线点餐及预约系统毕业设计项目源码文档
  • 创维SK-L1002灵犀屏深度优化指南:免刷机安装第三方桌面,秒变流畅安卓机顶盒|手机一键操作|纯技术教程
  • ip-location-zh 完全指南:PHP 如何 3 分钟搞定无需数据库的 IP 地理位置查询?
  • MinIO 停止维护怎么办?Docker 迁移 RustFS 实战:数据零丢失
  • LX Music 桌面版:免费音乐聚合播放器完整指南
  • Outfit 字体完整指南:9 种字重免费商用,3 分钟装进系统
  • Shallows序列化能力清单:JSON、Plist与String存储映射全覆盖指南
  • 数字化转型全景解析:标准化、信息化、数字化与智能化的演进路径与实践指南
  • 为什么Intel放弃Hyperscan:Vectorscan项目背后的开源反击战
  • Java面试前,我建议你重点复习这几个核心知识点
  • 谷歌数据分析 V 笔记(二)
  • 2026年口碑出众的表型平台生产厂家盘点,值得你深入了解
  • 3步完成微信聊天记录导出全指南:免费永久保存为HTML和Word
  • 如何用 Cosmic Ray 的 cr-rate 诊断测试薄弱点:变异存活率分析完全教程
  • Paperless-ngx 完整上手指南:五步把纸质文件变成可搜索档案
  • 如何使用 DALL-E 2?
  • 2026年,揭秘宜昌市伍家岗区那些超好的差旅型酒店门店!