我尝试使用这段代码来打印一个基于$num变量值的文本,但是当我给它分配一个非数字值时,输出就像我分配了一个正数,这里的输出不应该是'Undefined Value'吗?我是说为什么不执行默认情况?
$num = ";";
match (true) {
$num < 0 => print 'negative number',
$num == 0 => print 'zero',
$num > 0 => print 'positive number',
default => 'Undefined Value',
};
//Output: positive number
2条答案
按热度按时间kr98yfug1#
我是这样做的,它起作用了:
b4wnujal2#
一个简单的测试案例:
演示
如果我们检查比较运算符是如何工作的,我们可以理解这两个运算符都被转换为数字,但从PHP/8.0开始就不再是这样了:
Demo
我怀疑文档需要修复,目前的规则是右侧运算符转换为字符串。因此,
;
在ASCII中是3B
,0
是30
(因此“较小”)。关于你的代码,你可以添加一个像这样的数字检查:
但是也许(记住这是非常主观的)匹配表达式并没有为这个用例提供最精简的语法,而好的旧if/else集也可以很好地工作。您可以轻松地调用
is_numeric()
一次,并避免IEEE精度错误: