我正在用PHP制作简单的纸牌游戏.当用户尝试播放卡片时,如果可以/不可以,我想抛出异常.而不是返回具有特定含义的数字(例如1表示坏卡,2表示轮到你...等等),我想使用自定义异常.我会捕获这些异常并向用户显示消息.
我意识到异常是出于异常错误的意思,但我认为这是设计程序的好方法.
问题是:我的例外没有被捕获.我有一个名为play.php的页面,它控制一个名为Game的类,它有一个抛出异常的Round.play.php页面从游戏中获取回合,并对其进行函数调用.但是,它说这个例外没有被发现.
这是一个快速解决方案吗?如何将Round类中的异常冒泡到play.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;
}
Run Code Online (Sandbox Code Playgroud)
我试过捕捉,不捕捉,投掷,重新抛出等等.
我同意一些评论,这是实现你想要做的奇怪方法,但是我看不到任何实际的代码问题.我的测试用例:
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";
Run Code Online (Sandbox Code Playgroud)
它实际上RoundAlreadyStartedException是没有被捕获,还是其他一些错误?
编辑:包装在课堂上,因为它有可能产生影响(它没有):
class TestException extends Exception {
}
class TestClass {
function raiseTestException() {
try {
throw new TestException("Test Exception raised");
} catch(TestException $e) {
throw $e;
}
return;
}
}
class CallerClass {
function callTestCallMethod() {
$test = new TestClass();
try {
$test->raiseTestException();
} catch(TestException $e) {
echo "Error: " . $e->getMessage();
}
}
}
$caller = new CallerClass();
$caller->callTestCallMethod();
// result: "Error: Test Exception raised";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4834 次 |
| 最近记录: |