Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中冒泡出现异常?_Php_Exception - Fatal编程技术网

在PHP中冒泡出现异常?

在PHP中冒泡出现异常?,php,exception,Php,Exception,我正在用PHP制作一个简单的纸牌游戏。当用户尝试玩一张牌时,如果他们能/不能,我想抛出一个异常。我希望使用自定义的例外情况,而不是返回具有特定含义的数字(例如,1表示坏卡,2表示不轮到你等等)。我将捕获这些异常并向用户显示消息 我意识到异常是针对异常错误的,但我认为这是设计程序的好方法 问题是:我的例外情况没有得到解决。我有一个名为play.php的页面,它控制一个名为Game的类,该类有一个抛出异常的循环。php页面从游戏中获取回合,并对其进行函数调用。然而,它表示,这一例外并没有得到全面的解

我正在用PHP制作一个简单的纸牌游戏。当用户尝试玩一张牌时,如果他们能/不能,我想抛出一个异常。我希望使用自定义的例外情况,而不是返回具有特定含义的数字(例如,1表示坏卡,2表示不轮到你等等)。我将捕获这些异常并向用户显示消息

我意识到异常是针对异常错误的,但我认为这是设计程序的好方法

问题是:我的例外情况没有得到解决。我有一个名为play.php的页面,它控制一个名为Game的类,该类有一个抛出异常的循环。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
,还是其他错误

编辑:包装在类中,很可能会产生影响(不会):


我也有这种奇怪的行为,除了不冒泡。 事实证明,我在另一个名称空间中有异常,但我没有显式地使用它,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 {
}