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


class defined as static member of another class

我一直在Java中做这类事情,我正试图弄清楚在PHP中这是否可行。如果可能的话,这就是我所期望的语法,但我想知道是否有一些特殊的方法可以做到这一点(如果可能,那就是)。

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..
}

不,你不能。然而,PHP 5.3中引入了名称空间。对于名称空间,您可以类似地执行以下操作:

<?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; // :)
    }
}

不,这是不可能的。

但是,您可以使用名称空间来获得类似的效果。

在PHP中无法做到这一点,但在php5.3中,您可以使用名称空间来实现类似的功能

http://php.net/namespace