php - 为什么 IntlDateFormatter 即使使用明显虚构的语言环境/语言字符串也不返回“false”?
问题描述
资源:
https://www.php.net/manual/en/intldateformatter.create.php
引用:
返回值¶ 在失败的情况下创建的 IntlDateFormatter 或FALSE。
代码:
$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
var_dump($fmt);
$fmt = new IntlDateFormatter( "madeupfakenonexistent" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
var_dump($fmt);
实际输出:
object(IntlDateFormatter)#3 (0) {
}
object(IntlDateFormatter)#2 (0) {
}
预期输出:
object(IntlDateFormatter)#3 (0) {
}
bool(false)
PHP:
7.4.12
结论:
手册在说谎,或者我误解了它。
解决方案
您误解了手册,但它似乎也不正确。
您的第一个错误是 PHP 中的构造函数只能返回指定类型的对象。它可以发出错误信号的唯一方法是抛出异常。然而,该页面还记录了静态方法IntlDateFormatter::create
和普通函数datefmt_create
,两者都可能返回 false。
您的第二个错误是假设“错误时返回 false”意味着将检测到每个可能的错误并返回 false。在这种特殊情况下,似乎没有验证指定的语言环境是否与任何特定列表中的一个匹配。为其他参数传递意外值被视为错误,例如$fmt = new IntlDateFormatter ("en_US", 99999, IntlDateFormatter::FULL, 'America/Los_Angeles', IntlDateFormatter::GREGORIAN);
.
您似乎意外正确的地方是这些函数似乎都没有返回false
此类错误。对于new IntlDateFormatter
,那将触发异常,因为它不能做任何其他事情;forIntlDateFormatter::create
并且datefmt_create
它会返回null
,这是错误参数的标准 PHP 行为,如此处所述。
我不是 100% 确定,但是查看相关的源代码,我认为这些函数在任何情况下都不会返回false
,因此可能应该更正/更新手册。
推荐阅读
- vb.net - VB 没有正确遵循关系运算符
- angular - 为什么平台就绪事件不会在电容器中触发?
- reactjs - React 的生命周期方法如何用 es6 箭头符号用 Typescript 编写?
- java - Kotlin+Gradle 可运行 jar - 依赖导致“找不到或加载主类”
- c# - 使用用户输入在二维数组中使用 foreach 循环替换项目
- node.js - npm start 不工作并且 gulp 已弃用?
- c++ - Make:变量无法从 shell 调用分配
- ios - Swift 将多个类分配给 UI 元素
- android - Android UDP 点对点网络通信(无服务器)
- firebase - Flutter/Firebase:如何在不使用 '.then(...)' 函数的情况下访问当前用户