尝试/捕获无法在PHP中工作,无法捕获异常?

时间:2019-05-16 19:22:34

标签: php exception

为什么尝试/捕获不起作用?

try {
    $tagsData = $vid["items"][0]["snippet"]["tags"];
    $tagsArray = array();
    $tagsString = "";
    for ($x = 0; $x < count($tagsData); $x++) {
        $tagsArray[$x] = $tagsData[$x];
        $tagsString .= $tagsArray[$x] . "  ,  ";
    }
    echo $tagsString;
} catch (\Exception $e) {
    echo "There is no tags.";
}

YouTube上有些视频没有标签,因此$ tagsData将为空...

1 个答案:

答案 0 :(得分:0)

在您的try块中,您的代码不会引发任何异常。 您可以创建一个私有方法或函数,当标签为空时会抛出异常。

function implementTagsStrings(?array $tagsData = []){
    if (!isset($vid["items"][0]["snippet"]["tags"])) {
        throw new \Exception("There is no tags.");
    }
    $tagsData = $vid["items"][0]["snippet"]["tags"];
    $tagsArray = [];
    $tagsString = "";
    for ($x = 0; $x < count($tagsData); $x++) {
        $tagsArray[$x] = $tagsData[$x];
        $tagsString .= $tagsArray[$x] . "  ,  ";
    }
    if (empty($tagsString)) {
        throw new \Exception("There is no tags.");
    }
    return $tagsString;
}

然后您的代码将起作用:

try {
    $tagsString = implementTagsStrings($vid);
    echo $tagsString;
} catch (\Exception $e) {
    echo $e->getMessage();
}

但是Niegel的评论也许更简单:

    if (!isset($vid["items"][0]["snippet"]["tags"])) {
      echo "There is no tags.";
    } else {
        $tagsArray = array();
        $tagsString = "";
        for ($x = 0; $x < count($tagsData); $x++) {
            $tagsArray[$x] = $tagsData[$x];
            $tagsString .= $tagsArray[$x] . "  ,  ";
        }
        echo $tagsString;
    }