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

时间:2012-02-22 21:15:34

标签: php class member

我一直用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..
}

3 个答案:

答案 0 :(得分:3)

不,你不能。但是,PHP 5.3中引入的是namespaces。使用命名空间,您可以类似地执行:

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

答案 1 :(得分:1)

不,这是不可能的。

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

答案 2 :(得分:1)

你不能用PHP做,但在php 5.3中你可以使用命名空间来实现类似的功能

http://php.net/namespace