Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_match正在匹配空主题_Php_Regex - Fatal编程技术网

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()
的结果。