如果条件不适用于 strpos

If condition not working with strpos

我创建了自定义函数 OutputMessage 从我插入错误消息的地方 ClassStyle 像这样 Error: image upload failed! 然后我分解字符串并拆分 class从它添加到 div class 但我的功能无法正常工作。

function OutputMessage($Message=''){
    if($Message){
        $Postion = strpos($Message,":");
        if($Postion !== TRUE){
            return sprintf('<div class="alert alert-default">%s</div>',$Message); 
        }else{
            $Message = explode(": ",$Message);
            return sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]); 
        }
    }else{
        return "";
    }
}

$Position 检查不工作,因为我传递的消息是 class 但它仍然返回默认值 class

来自manual entry of strpos() function

Returns the position of where the needle exists relative to the beginning of the haystack string (independent of offset). Also note that string positions start at 0, and not 1.

Returns FALSE if the needle was not found.

这意味着 if($Postion !== TRUE) 将永远是 true,因为 strpos() 永远不会 returns true.

要使您的函数按预期工作,请将您的 if 语句更改为 if($Postion === false)

strpos 的文档中,您可以看到该函数将 NEVER return 为真。只需在 if 语句中将其更改为 false 即可,一切正常。

为什么你不能这样实现....

function OutputMessage($Message = NULL){
    if(is_null($Message){
        return;
    }
    else {

        $arr = explode(":",$Message);
        if(count($arr)>0){
            return sprintf('<div class="alert alert-%s">%s</div>',strtolower($arr[0]),$arr[1]); 
        }

       else {
            return sprintf('<div class="alert alert-default">%s</div>',$Message); 
        }
    }
}

strpos() 函数 returns 字符串的起始位置为整数,如果字符串不存在则为 FALSE。因此,您的 if else 语句永远不会命中 else 语句,因为 $Position 永远不会等于 TRUE。

交换 if 语句以检查 FALSE if($Position === FALSE) 那么您应该能够获得正确的行为。

您可以使用大于 0 的 TRUE

function OutputMessage($Message=''){
if($Message){
    $Postion = strpos($Message,":");
    if($Postion < 0){
        return sprintf('<div class="alert alert-default">%s</div>',$Message); 
    }else{
        $Message = explode(": ",$Message);
        return sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]); 
    }
}else{
    return "";
}

}

试着用这个实现,

function OutputMessage($Message=''){
    if(is_null($Message) || $Message === ""){ return ""; }

    if(strpos($Message,":") === false){
       $result = sprintf('<div class="alert alert-default">%s</div>',$Message); 
    }else{
        $Message = explode(": ",$Message);
        $result = sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]); 
    }
    return $result;
}