在PHP中冒泡出现异常?
我正在用PHP制作一个简单的纸牌游戏。当用户尝试玩一张牌时,如果他们能/不能,我想抛出一个异常。我希望使用自定义的例外情况,而不是返回具有特定含义的数字(例如,1表示坏卡,2表示不轮到你等等)。我将捕获这些异常并向用户显示消息 我意识到异常是针对异常错误的,但我认为这是设计程序的好方法 问题是:我的例外情况没有得到解决。我有一个名为play.php的页面,它控制一个名为Game的类,该类有一个抛出异常的循环。php页面从游戏中获取回合,并对其进行函数调用。然而,它表示,这一例外并没有得到全面的解决 有没有快速解决这个问题的方法?如何将我的Round类中的异常冒泡到play.php页面在PHP中冒泡出现异常?,php,exception,Php,Exception,我正在用PHP制作一个简单的纸牌游戏。当用户尝试玩一张牌时,如果他们能/不能,我想抛出一个异常。我希望使用自定义的例外情况,而不是返回具有特定含义的数字(例如,1表示坏卡,2表示不轮到你等等)。我将捕获这些异常并向用户显示消息 我意识到异常是针对异常错误的,但我认为这是设计程序的好方法 问题是:我的例外情况没有得到解决。我有一个名为play.php的页面,它控制一个名为Game的类,该类有一个抛出异常的循环。php页面从游戏中获取回合,并对其进行函数调用。然而,它表示,这一例外并没有得到全面的解
// in PLAY.php
try {
$game->round->startRound($game->players);
} catch (RoundAlreadyStartedException $e) {
echo $e->getMessage();
}
// in ROUND class
if (!($this->plays % (self::PLAYS_PER_ROUND + $this->dealer))) {
try {
throw new RoundAlreadyStartedException();
} catch (RoundAlreadyStartedException $e) {
throw $e;
}
return;
}
我尝试过捕捉、不捕捉、抛出、重新引用等等。我同意一些评论,即这是一种奇怪的方式来实现您想要做的事情,但是我看不到任何实际的代码问题。我的测试用例:
class TestException extends Exception {
}
function raiseTestException() {
try {
throw new TestException("Test Exception raised");
} catch(TestException $e) {
throw $e;
}
return;
}
try {
raiseTestException();
} catch(TestException $e) {
echo "Error: " . $e->getMessage();
}
// result: "Error: Test Exception raised";
实际上是未捕获的RoundAlreadyStartedException
,还是其他错误
编辑:包装在类中,很可能会产生影响(不会):
我也有这种奇怪的行为,除了不冒泡。 事实证明,我在另一个名称空间中有异常,但我没有显式地使用它,PHP也没有对此抱怨。 因此,使用mynamespace\exceptions\MyException添加
代码>解决了它。
也许这也会发生在你身上
HTH.我在Laravel 4.2中也遇到了同样的问题
当Laravel侦听\Exception处理程序时,除非您修改或扩展Laravel,否则您不能使用根抛出异常并期望在应用程序中冒泡。您需要的是创建一个空异常,该异常扩展您的命名空间的\Exception,然后根据需要捕获您的命名空间异常
<?php
namespace Yournamespacehere;
class Exception extends \Exception {
}
这听起来很糟糕。我来自Java背景:)如果没有任何代码可以查看,很难诊断。您是否正在使用尝试。。。catch
块?我知道异常是针对异常错误的,但我认为这是设计我的程序的好方法。
我想我不同意你的观点;)。普通ol'返回值有什么问题?此外,如果您在试图捕获内容的类中使用名称空间,请确保执行以下操作:…}catch(\Exception$e){…(注意反斜杠,表示它是“根命名空间”)
<?php
namespace Yournamespacehere;
class Exception extends \Exception {
}