2012-02-22 20 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

+0

あなたの脇に、私はあなたが '内部クラス'を探していると思います。質問:http://stackoverflow.com/questions/4351782/how-do-i-use-inner-classes-in-php短い答えは「いいえ」 –

+0

「ネストされたクラス」とも呼ばれます。 – linepogl

答えて

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

私は名前空間について知りませんでしたので、失望しました。 – Izkata

1

いいえ、できません。

しかし、同様の効果のために名前空間を使用することができます。