我想PHP的异常系统会包罗万象。但事实并非如此。
try{
$obj = new Asdfasdfasdf()
} catch(Exception $e){
trace(...something...)
}
但它并没有捕捉到这种错误,我搜索了php文档,在try,catch子句中没有说明哪种异常/错误是可以捕捉的。
那么,我怎么知道哪种异常/错误会被我的catch子句捕获呢?
p.S.
我终于明白php引擎的"错误"并不是使用land代码的"例外"。如果要使用异常来处理引擎"error",则应手动将所有"error"包装在异常中。
如果您想在类不存在的情况下引发异常,可以使用class_exists()
。
一个天真的例子可能看起来像:
function createClass($class)
{
if (!class_exists($class)) {
throw new Exception(
sprintf('Class %s does not exist', $class)
);
}
return new $class;
}
try {
$asdfasdfasdf = createClass('Asdfasdfasdf');
} catch (Exception $e) {
echo $e->getMessage();
}
根据我的经验,当找不到类时,大多数PHP框架都会抛出某种异常——例如,Symfony2抛出ClassNotFoundException
。也就是说,我不知道你是否能"抓住"它,它可能真的只是一种发展援助。
PHP 7刚刚发布,根据我从规范中了解到的情况,您将能够将fatal error
捕获为EngineException
。我不知道这是否适用于你的例子;我还没有测试它,因为我还没有安装PHP 7稳定版。我在一个在线REPL上用PHP7的alpha版本尝试了您的例子,但它似乎不起作用。
然而,为了完整起见,这里有一个来自RFC的例子:
function call_method($obj) {
$obj->method();
}
try {
call_method(null); // oops!
} catch (EngineException $e) {
echo "Exception: {$e->getMessage()}'n";
}
// Exception: Call to a member function method() on a non-object
无论如何,正如@MarkBaker和@MarcB在问题评论中所指出的,在以前的PHP版本中,您无法"捕获"fatal error
。
希望这有帮助:)