douweicheng5532 2012-02-22 21:15
浏览 60
已采纳

class定义为另一个类的静态成员

I do this type of thing in Java all the time, and I'm trying to figure out if it's possible in PHP. This is what I would expect the syntax to look like if it was possible, but I'm wondering if there's some special way to do it (if it's possible, that is).

class Foo {
   public static class FooBarException extends Exception {
   }
   public static class BarBazException extends Exception {
   }

   public function DoSomething() {
      try {
          // Calls to other class methods that can
          // throw FooBarException and BarBazException
      } catch (self::FooBarException $e) {
          // Stuff..
      }
   }
}

$bang = new Foo();
try {
   $bang->DoSomething();
} catch (Foo::BarBazException $e) {
   // Stuff..
}
  • 写回答

3条回答 默认 最新

  • dswm97353 2012-02-22 21:23
    关注

    No, you can not. However, introduced in PHP 5.3 are namespaces. With namespaces you could similarly do:

    <?php
    namespace MyNamespace
    {
        use Exception;
    
        class FooBarException
            extends Exception
        {
        }
    
        class FooBazException
            extends Exception
        {
        }
    
        class Foo
        {
            public function doSomething()
            {
                throw new FooBarException;
            }
        }
    }
    
    namespace AnotherNamespace
    {
        $bang = new \MyNamespace\Foo;
        try {
            $bang->doSomething();
        } catch(\MyNamespace\FooBarException $up) {
            throw $up; // :)
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 matlab解优化问题代码
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用