gpt4 book ai didi

php - 在 PHP 中冒泡异常?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:00 25 4
gpt4 key购买 nike

我正在用 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;
}

我试过抓、不抓、扔、再扔等。

最佳答案

我同意一些评论,认为这是实现您想要做的事情的一种奇怪方式,但是我看不到任何实际的代码问题。我的测试用例:

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 没有被捕获,还是其他错误?

编辑:包装在类中,如果它有所作为(它没有):

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";

关于php - 在 PHP 中冒泡异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4239848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com