在PHP中冒泡异常?

Lin*_*ndz 4 php exception

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

我试过捕捉,不捕捉,投掷,重新抛出等等.

Ham*_*ish 6

我同意一些评论,这是实现你想要做的奇怪方法,但是我看不到任何实际的代码问题.我的测试用例:

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)