Php preg_match正在匹配空主题
我有一个Php preg_match正在匹配空主题,php,regex,Php,Regex,我有一个preg_match在一个开关/案例中,它匹配一个空主题,我不明白为什么 这是我的密码: switch ( $page_type ) { case ( preg_match('/^assets_?.*/', $page_type ) ? true : false ): // code break; } $page\u type通常是一个字符串,但我发现在某些情况下它可以为NULL。出于某种原因,这里的三元数正在返回真值 在其中一种情况下,将运行案
preg_match
在一个开关/案例中,它匹配一个空主题,我不明白为什么
这是我的密码:
switch ( $page_type ) {
case ( preg_match('/^assets_?.*/', $page_type ) ? true : false ):
// code
break;
}
$page\u type
通常是一个字符串,但我发现在某些情况下它可以为NULL。出于某种原因,这里的三元数正在返回真值
在其中一种情况下,将运行案例中的代码
我意识到我可以通过在切换之前检查空值来解决这个问题,但是有人能解释一下为什么会发生这种情况吗?当
$page\u type
为NULL
时,preg\u match()
将返回0
,三元将返回false
。在这种情况下,它相当于:
switch (null) {
case false:
//code
break;
}
}
由于null==false
,因此执行此情况
不要使用开关
如果需要测试复杂条件而不是精确匹配,请编写一条普通的if
语句:
if (preg_match('/^assets_?.*/', $page_type )) {
// code
}
当
$page\u type
为NULL
时,preg\u match()
将返回0
,三元数将返回false
。在这种情况下,它相当于:
switch (null) {
case false:
//code
break;
}
}
由于null==false
,因此执行此情况
不要使用开关
如果需要测试复杂条件而不是精确匹配,请编写一条普通的if
语句:
if (preg_match('/^assets_?.*/', $page_type )) {
// code
}
谢谢你的回答,巴尔马。这也是我的想法,所以我尝试了类似于
case(preg\u match('/^assets?*/',$page\u type)==1?true:false):
的方法,得到了相同的结果。像这样的东西不应该修复条件吗?你不明白switch/case
是如何工作的。您不需要在案例中设置条件,而是将精确匹配放在那里case X:
是if($page\u type==X)
的缩写,因此当您这样做时,您仍然在测试if($page\u type==true)
或if($page\u type==false)
这取决于preg\u match()
的结果。谢谢您的回答。这也是我的想法,所以我尝试了类似于case(preg\u match('/^assets?*/',$page\u type)==1?true:false):
的方法,得到了相同的结果。像这样的东西不应该修复条件吗?你不明白switch/case
是如何工作的。您不需要在案例中设置条件,而是将精确匹配放在那里case X:
是if($page\u type==X)
的缩写,因此当您这样做时,您仍然在测试if($page\u type==true)
或if($page\u type==false)
这取决于preg\u match()
的结果。