【问题标题】:PHP Nested class exception handlingPHP嵌套类异常处理
【发布时间】:2023-02-10 02:25:06
【问题描述】:

我真的很困惑处理类链接异常的正确方法是什么。

例如,

我有一个工厂类,

游戏工厂

<?php

namespace App\GameFactory;

class GameFactory
{
    public static function generateGame($game)
    {
        if (!GameEnum::tryFrom($game)) {
            throw new InvalidGameException(.....);
        }
       
        return new SuperMario();
    }
}

我有一个服务类,然后将由控制器类调用。

游戏服务

<?php

namespace App\Service;

class GameService
{
    public function runGame()
    {
        $factory = GameFactory::generateGame($this->game);

        // do logic...
    }
}

游戏控制器

<?php

namespace App\Controller;

class GameController
{
    public function run($game)
    {
        $service = new GameService($game);

        $service->runGame();
    }
}

我的问题是,我是否需要在 GameService 中捕获它,然后在 GameController 中捕获它? 还是在Initiator-Class(GameController) 中捕获它就足够了?

【问题讨论】:

  • 通常,您会为您的应用程序设置一些自定义错误/异常处理程序。如果某处抛出异常导致应用程序无法正常工作/中断流程,则不要在代码中捕获它,而将其留给应用程序自定义异常处理程序。如果异常没有破坏任何东西(你可以继续执行),那么你应该在你想要继续的级别/范围内捕获它。
  • 异常处理与类关系不大。您可以在任何能够最好地处理错误的函数中捕获错误,这取决于应用程序设计。

标签: php exception


【解决方案1】:

我建议two 方法:

1.对于这种情况,您应该始终使用 try...catch 块。这有助于封装并确保其他类(父类或其他类)不对子类或朋友类抛出的错误负责。

2.Exception Stack 想象成仅向一个方向展开。如果您在父类中捕获子类的异常,那么日志条目将尝试制作(一个圆圈)并循环回调用者类(在我们的例子中是父类)。所以,你应该在它们各自的类中抛出(显示或管理它们)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2016-12-12
    • 2011-01-25
    • 2017-07-24
    相关资源
    最近更新 更多