亲啊嘴金,发布于:Wednesday, 04 Feb 26 20:12:57 | 0 浏览
我认为PHP 8.5版本不应该删除 rfc7231 时间常量
我祖传写PHP几百年,今天发现PHP8.5单单删除了 rfc7231 DATE_RFC7231 常量。
#https://www.php.net/manual/en/migration85.deprecated.php#migration85.deprecated.date
官方的意图是 以后时间统一为 GMT 表示法,这种 UTC 时间表示法不够精准。
————————分割线——————————
那这些东西是干什么的捏?
因为凡属是 RFC 的登西,其实就是一种规范草案,人类一眼能明了目的是什么。
比如我用PHP输出一段 RSS内容。 就用
echo date(DATE_RSS);
给数据库和AI快速阅读预览页就用
echo date(DATE_RFC3339);
跨应用的 API 调用时间就用
echo date(DATE_COOKIE);
比如写这篇博客,echo 输出最终是给人类看的就用
echo date("Y-m-d H:i:s") 或者 echo date("D, d M H:i:s")
这几种在代码书写上从PHP代码文件来讲 你可以很顺畅的读懂代码最终【输出成品】的目的是干什么。
可以说这是一种对代码规范的恪守的准则,每当你读到别人能这样按照不成文的约定写的代码以后总有种惺惺相惜的感觉。
因为COOKIE、RSS之类的时间格式只需要确保机器能读能读对就行。她们都遵循RFC规范。
然后需要人类看的部分时间格式肯定就是 Y - M - D 表示法。
再举例: php 代码中 DATE_RFC7231 只会以下面代码形式搭配出现,没有例外,我祖传写PHP的信我。
header("Last-Modified: date(DATE_RFC7231)");
#https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Reference/Headers/Last-Modified
因为 RFC7231 这种时间格式就是给 Last-Modified 用的。HTTP Date 头也算在内,但一般不主动去控制 Date 头(即便是HTTP协议规范也有UTC和GMT混用的情况)
如果按照PHP官方 8.5 的写法 以后就得
header("Last-Modified: date(D, d M Y H:i:s)". "GMT");
第一眼感觉就傻逼得不行。
第二眼就还得去翻一下各路文档,
看看D, d M Y H:i:s 时间表示法 是否符合 RFC7231 规范。。。
如果 用了 RFC850 规范表示法 l, d-M-y H:i:s T ,Last-Modified头还不起作用。。。
真的,现在PHP都是程序员存量市场,我都可以盲猜到存量市场上PHP程序员被这个暗坑给坑的以后会大有人在,还存在一种可能就是新兴程序员维护老代码时候会被绕晕。就截止到我写这篇为止,有些AI甚至都分不清 Last-Modified 只有输出 RFC7231 表示法 Last-Modified 才起作用。
而且从 header("Last-Modified: date(DATE_RFC7231)"); 写法来看,一眼就能明白这份PHP代码部分很专注,遵循了RFC7231时间格式输出了内容,输出的内容是作用到机器或者指引AI它这个页最后修改时间参考值。而不是什么 D, d M Y H:i:s 这样的转化语。
再接着,如果迁移代码到 PHP 8.5 用到 RFC7231 函数的地方,会出现一个 Noitce:
Constant DateTimeInterface::RFC7231 …… 如果这个地方后面典型用法是 header 函数 那么又会爆一个
Warning: Cannot modify header information - headers already sent by 巴拉巴拉。
如果真这么爆,那些新兴程序员维护的时候肯定会掉进我刚才说的转化语坑里面。
历次PHP大版本更迭时候被坑最多的就是phpmyadmin 这个数据库管理软件。
#https://github.com/phpmyadmin/phpmyadmin/issues/20037
并且最牛逼的是PHP官方 删 DATE_RFC7231 常量 不删 DATE_RFC850 常量,RFC7231规范就是用来替代RFC850的,而且RFC850还是个标记需要删除的规范。
#https://www.php.net/manual/en/datetime.constants.php#constant.date-rfc850
而且截止到 2026年2月 问 AI 都知道 RFC850 规范需要删除,推荐使用 RFC7231 ,但是她们深度思考又发现 PHP 删除 DATE_RFC7231 常量。结果给绕晕了,不仅AI绕晕了自己,问AI的人类也会被绕晕。
因此 我表示 我看不懂 PHP 8.5.X 官方单开一个 【主题】 单删一个 DATE_RFC7231 常量到底是怎么想的。。