2012-02-22 3 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 짧은 대답은 'No'입니다. –

+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

실망 스럽지만 +1하고 받아 들일 수 없기 때문에 네임 스페이스에 대해 알지 못합니다. – Izkata

1

아니요, 불가능합니다.

그러나 유사한 효과를 위해 네임 스페이스를 사용할 수 있습니다.

관련 문제