2016-11-25 65 views
1
function TriggerContent($c, $db){ 
    try { 
     include 'pages/' . $c . '.php'; 
     $content= getContent(); 
    } catch (Exception $e){ 
     $content = 'Error'; 
    } 
    return $content; 
} 

我想要的是显示error如果php文件不存在。 但它不起作用...为什么试试catch不工作?我究竟做错了什么? (php)

我在做什么错?

或者这只是不适合尝试赶上PHP?

+0

使用'file_exists()'然后'throw'异常? – Qirel

+0

getContent()抛出? – marekful

+0

是否在里面创建变量try catch块在他们之外不可访问?我真的不知道, – Phiter

回答

1

它不起作用,因为失败的include不会引发异常,它会引发警告。因此,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(); 
} 

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

Error: File does not exist: [path-to-file]

$content变量。

参考

+0

我会接受这个答案,但我其实想想try catch会像C#这样的语言一样工作,如果某些东西不起作用,它总会抛出一个异常...... –

+0

PHP有多种类型的错误,并非一切都是例外。你有通知,警告(这两个*“可以”*被忽略),异常(可被捕获)以及致命错误(停止执行)。所以如果你想把某些东西当作异常处理(在try/catch中),你必须特别抛出异常。你也有'require'而不是'include',但是会抛出一个“致命错误”,这是不可捕捉的(我可能是错的,但不是默认情况下)。 – Qirel

1

如果您返回'错误'并希望改为看到实际的异常消息,则此行应取代您的$ content ='错误';

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

然后你的函数将返回$ content,包括消息错误字符串。