是否可以判断我们是否在外部try..catch块内?
示例代码(请以 为例):
<?php
class Foo{
public function load($id)
{
try{
// Model throw NodeNotFoundException only in rare cases
$node = $this->getModel()->loadById($id);
}
catch(NodeNotFoundException $nle)
{
// @here I need to tell if im in the First case or in the Second one,
// detecting the external try..catch block
if(externalTryCatchBlock() === true)
{
throw $nle;
}
else
{
watchdog('Unable to find node', $nle->details);
}
return false;
}
catch(Exception $e)
{
watchdog('Something gone wrong.');
return null;
}
return $node;
}
}
$foo = new Foo();
// First case, no external try..catch
$node = $foo->load(2);
// Second case: we need to do here something different if the node load
// throw an exception
try{
$another_node = $foo->load(3);
}
catch(NodeNotFoundException $nle)
{
watchdog('Unable to find node, using default.');
$another_node = Bar::defaultNode(); // This is JUST for example
}
// Do something with $another_node
?>
基本上,只有在有另一个catch块等待它时才需要重新抛出异常(NodeNotFoundException
),以避免Fatal error: Uncaught exception
。
当然,对于上面的考试,我可以使用2种加载方法(一种用另一种用于尝试..)但我想避免这种情况...我很想知道是否可以检测PHP中的try..catch块
答案 0 :(得分:0)
担心如何调用它不是一段代码的工作。代码抛出异常,始终是故事的结尾。因此代码具有“属性”可能抛出异常x :
/**
* Does something.
*
* @return mixed Some value.
* @throws SomeException if something went wrong.
*/
function foo() {
...
}
现在,无论谁调用此代码,都需要做好准备,以便随时抛出异常。代码无法担心某人是否可以捕获异常。如果存在异常情况,则会抛出异常,因为它无法继续执行其工作。 调用者需要为此做好准备,而不是相反。