【问题标题】:why is try catch not working? What am I doing wrong? (php)为什么尝试捕获不起作用?我究竟做错了什么? (php)
【发布时间】:2017-04-10 05:39:37
【问题描述】:
function TriggerContent($c, $db){
    try {
        include 'pages/' . $c . '.php';
        $content= getContent();
    } catch (Exception $e){
        $content = 'Error';
    }
    return $content;
}

如果 php 文件不存在,我想要它显示error。 但它不起作用......

我做错了什么?

或者这不能与 php 中的 try catch 一起使用?

【问题讨论】:

  • 使用file_exists() 然后throw 异常?
  • getContent() 会抛出吗?
  • 在 try catch 块中创建的变量是否可以在它们之外访问?我真的不知道。,
  • 嗯...那我该怎么做呢?我从老师那里得到了这个作业,他说我必须尽可能少使用 if/else... 那么有没有办法没有它们?
  • 您是否在此处查看过解决方案:stackoverflow.com/questions/8261756/…

标签: php


【解决方案1】:

它不起作用,因为失败的包含不会引发异常,而是会引发警告。因此,catch 块将永远不会被执行,因为只有在出现异常时才会输入它。您可以检查文件是否存在,如果不存在,则抛出异常。

try {
    $page = 'pages/' . $c . '.php';

    if (!file_exists($page))
        throw new Exception('File does not exist: ['.$page.']');

    include $page;
    $content = getContent();

} catch (Exception $e){
    $content = 'Error: '.$e->getMessage();
}

如果目标文件不存在,则输出

错误:文件不存在:[path-to-file]

在您的 $content 变量中。

参考

【讨论】:

  • 我会接受这个作为答案,但我实际上认为 try catch 与在 C# 等语言中的工作方式相同,如果某些东西不起作用,它总是抛出异常......
  • PHP 有多种类型的错误,并非所有情况都是例外。您有通知、警告(这两个 "can" 被忽略)、异常(可以被捕获)和致命错误(停止执行)。因此,如果您想将某事作为异常处理(在 try/catch 中),则必须专门抛出异常。你也有require,而不是include,但这会引发一个“致命错误”,这是无法捕获的(我可能错了,但默认情况下不是)。
【解决方案2】:

如果您返回“错误”并希望看到实际的异常消息,则此行应替换您的 $content = 'Error';

$content = 'Caught exception: '.$e->getMessage();

然后您的函数将返回包含消息错误字符串的 $content。

【讨论】:

    猜你喜欢
    • 2016-05-27
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多