2012-02-22 104 views
2

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

顺便说一句,我忘了是否有一个真正的名字来做这个,用任何语言。我认为它是“子类”,但那将用作“FooBarException是Exception的子类”... – Izkata 2012-02-22 21:16:39

+0

除了你的旁边,我认为你正在寻找'内部类',并且这里有一个类似的链接问题:http://stackoverflow.com/questions/4351782/how-do-i-use-inner-classes-in-php简短回答是'不' – 2012-02-22 21:19:38

+0

它也被称为“嵌套类”。 – linepogl 2012-02-22 21:20:19

回答

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

令人失望,但+1和接受,因为我甚至不知道名称空间。 – Izkata 2012-02-22 21:33:03

1

不,这是不可能的。

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

相关问题