为什么 PHP 向 NumberFormatter 的 format() 发送(根据手册)正确的参数会出现致命错误?
Why does PHP give me a fatal error for sending the (according to the manual) correct arguments to NumberFormatter's format()?
来自手册:https://www.php.net/manual/en/numberformatter.format.php
public NumberFormatter::format ( int|float $value , int $type = ? ) : string
此代码:
$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
$string = $a->format(123, \NumberFormatter::TYPE_CURRENCY);
var_dump($string);
原因:
PHP Fatal error: Uncaught ValueError: NumberFormatter::format(): Argument #3 must be a NumberFormatter::TYPE_* constant
嗯?论据#3? 没有参数 #3(程序版本除外)!还有这段代码(认为文档可能是错误的,之前没有人发现过它):
$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
$string = $a->format(123, 'USD', \NumberFormatter::TYPE_CURRENCY);
var_dump($string);
但这只会导致:
PHP Fatal error: Uncaught ArgumentCountError: NumberFormatter::format() expects at most 2 arguments, 3 given
好的...那么你想要怎么样,PHP?是3还是2?我现在迷路了。
重要:我不使用 formatCurrency
的原因是(在实际代码中)我正在尝试删除货币符号,但以其他方式将其格式化为货币。 formatCurrency
遗憾地忽略了 setSymbol
,但 format
尊重它。这就是在这种情况下使用 format
的原因。因此,请不要告诉我使用 formatCurrency
.
intl
扩展的文档似乎有点不完整或有误导性。似乎在没有第二个类型参数的情况下调用 format()
会在 NumberFormatter::CURRENCY
对象上产生您想要的输出:
$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
echo $string = $a->format('123');
// 3.00
$a = new \NumberFormatter('en_GB', \NumberFormatter::CURRENCY);
echo $string = $a->format('123');
// £123.00
文档显示该参数是可选的,但显然没有解释应该如何或何时使用它。在这种情况下,省略它似乎可以完成工作。
来自手册:https://www.php.net/manual/en/numberformatter.format.php
public NumberFormatter::format ( int|float $value , int $type = ? ) : string
此代码:
$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
$string = $a->format(123, \NumberFormatter::TYPE_CURRENCY);
var_dump($string);
原因:
PHP Fatal error: Uncaught ValueError: NumberFormatter::format(): Argument #3 must be a NumberFormatter::TYPE_* constant
嗯?论据#3? 没有参数 #3(程序版本除外)!还有这段代码(认为文档可能是错误的,之前没有人发现过它):
$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
$string = $a->format(123, 'USD', \NumberFormatter::TYPE_CURRENCY);
var_dump($string);
但这只会导致:
PHP Fatal error: Uncaught ArgumentCountError: NumberFormatter::format() expects at most 2 arguments, 3 given
好的...那么你想要怎么样,PHP?是3还是2?我现在迷路了。
重要:我不使用 formatCurrency
的原因是(在实际代码中)我正在尝试删除货币符号,但以其他方式将其格式化为货币。 formatCurrency
遗憾地忽略了 setSymbol
,但 format
尊重它。这就是在这种情况下使用 format
的原因。因此,请不要告诉我使用 formatCurrency
.
intl
扩展的文档似乎有点不完整或有误导性。似乎在没有第二个类型参数的情况下调用 format()
会在 NumberFormatter::CURRENCY
对象上产生您想要的输出:
$a = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
echo $string = $a->format('123');
// 3.00
$a = new \NumberFormatter('en_GB', \NumberFormatter::CURRENCY);
echo $string = $a->format('123');
// £123.00
文档显示该参数是可选的,但显然没有解释应该如何或何时使用它。在这种情况下,省略它似乎可以完成工作。