我有以下代码可以使用(必须捕获异常),但事实并非如此。
<?php
class Entertainment {
}
class Clown extends Entertainment{
}
class Job {
}
function handleEntertainment(Entertainment $en, callable $callback = NULL){
try{
print("Handling " . get_class($en) . " is fun");
if($callback !== NULL){
$callback();
}/*else {
print("<br />" . "Function must be given!");
}*/
}catch(Exception $e){
echo("Exception: " . $e->getMessage() . " Line: " . $e->getLine());
}
}
$functionCallback = function(){
print("<br />". " I am a function");
}
?>
这是测试文件
<?php
require_once("manyclasses.php");
try{
handleEntertainment(new Clown());
handleEntertainment(new Job());
}catch(Exception $e){
echo("Exception: " . $e->getMessage() . " Line: " . $e->getLine());
}
?>
第二个调用handleEntertainment(new Job());
应该抛出异常并且必须被捕获但是它不能正常工作。我得到的是
Catchable fatal error: Argument 1 passed to handleEntertainment() must be an instance of Entertainment, instance of Job given, called in ................
我试图在这里搜索答案,但我读到的帖子让我更加困惑。有些人说警告和错误不会被视为例外。
我的理解是警告和错误也是例外,try和catch块必须能够捕获它们。
为什么它不起作用,为什么警告和错误不是例外?
答案 0 :(得分:0)
这是因为Catchable Fatal Error
是导致引擎处于不稳定状态的错误,因此应该中止执行。
想一想:在“正常”异常之后,有时可以恢复程序执行流程,而在这种情况下最好中止执行。
但是,如果您需要,可以定义your own error handler并让执行继续