【问题标题】:PHP exception with str_replace()带有 str_replace() 的 PHP 异常
【发布时间】:2017-08-08 12:08:33
【问题描述】:

早安,

我有一个小问题。 想要为 str_replace 函数创建 PHP 异常,但我似乎无法做到这一点。

    try {
        ///######## REPLACE THE PLACEHOLDERS
        $template   = str_replace($Source, $Target, $templateblocks[$file]);
    }
    catch (Exception $e) {
        echo 'Caught exception: ',  $e->getMessage(), "\n";
    }

以上是我的代码。 这背后的原因是,在某个迭代中,它会向数组错误抛出一个字符串。 但是当我添加

if(is_array($templateblocks[$file]) === true){
echo 'an array set : print_r($templateblocks[$file], true).PHP_EOL.'<br /> file = '.$file);
}

这不起作用。所以我建议添加一个异常来解决这个问题。但我显然错过了一些东西。

提前致谢

【问题讨论】:

标签: php exception


【解决方案1】:

我不确定您的实际问题是什么。如果我没记错的话,您不能将自己的代码(异常)附加到基本的 PHP 函数中。

但是如果你使用 PHP 7+,你可以捕捉到 \Throwable interface (class.throwable.php) ??

编辑

我的错误,只有错误会抛出 Throwable。在这种情况下,唯一的方法是在使用函数之前测试您的参数。

【讨论】:

    【解决方案2】:

    str_replace() 函数不会引发任何异常。您只能检查您的参数(即$Source$Target$templateblocks)并自己抛出任何您想要的异常。

    例子:

    if(strllen($Source) > 10) {
        throw new \InvalidArgumentException('The source string is too long!');
    }
    

    然后你最终可以在try {} catch(\InvalidArgumentException $e) {} 中捕获它。

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 2012-01-20
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多