phpstan 不通过 strip_tags

问题描述

我有一个 html 字符串,我想用 <br> 将其分解,但有时它可能在其他标签内。

if (in_array($param,$customOrdering,true) && $value) {
    $ordering = array_search($param,true);
    $segments[$ordering] = [];
    if (in_array($param,$explodeParams,true)) {
        $values = explode('<br>',$value);
        foreach ($values as $v) {
            $testing_value = $v;
            if (!empty(trim(strip_tags($testing_value)))) {
                array_push($segments[$ordering],$this->createSegmentFromParam($param,$v));
138         } elseif (!empty(trim($v)) && $segments[$ordering]) {
139             end($segments[$ordering])->value_raw .= strip_tags($v,$this->allowedTags);
            }
        }
    } else {
        array_push($segments[$ordering],$value));
    }
}

createSegmentFormParam 的声明

 @return ArrayHash
 
private function createSegmentFromParam($param,$value)

我有来自 PHPStan 的输出

 138    Right side of && is always false.                                    
 139    Cannot access property $value_raw on false.

任何想法如何传递?代码运行良好

解决方法

对于类似行为或 PHP Stan 仍有未解决的问题 - False negative with array_push on property

尽量不使用 array_push 并在第 138 行将其替换为以下内容:

$segments[$ordering][] = $this->createSegmentFromParam($param,$v);

除此之外,您的代码开头的 array_search 可能会返回 FALSE,您确实想在进一步深入代码之前检查一下...