2012-10-29 2 views
1

정적 함수 (을 사용하여 자체의 새 인스턴스를 반환하는)가있는 추상 클래스가 있는데 어떻게 얻을 수 있습니까? 클래스 명. 세계 당신은 명시 적으로 클래스 이름을 사용할 필요가 없습니다추상 클래스의 정적 함수에서 클래스 이름 가져 오기

abstract class ExtendableObject { 
    static function getObject() { 
     return new static($data); 
    } 

    static function getSearcher() { 
     return new ExtendableObjectFinder(/* CLASS NAME CLASS */); 
    } 
} 

class ExtendableObjectFinder { 
    private $cn; 

    function __construct($className) { 
     $this->cn = $className; 
    } 

    function where($where) { ... } 

    function fetch() { ... } 
} 
+0

원래 의도를 요약 할 수 있습니까? 클래스 이름을 쉽게 얻을 수있는 방법이 있지만 구현을위한 클래스 이름을 얻는 목적은 무엇입니까? 노력하는 것보다 사용하는 것이 더 좋은 패턴 일 수 있습니다. –

답변

2

클래스의 이름을 얻으려면 get_class을 사용하고 $this을 전달하십시오.

또는 정적 방법 내에서 사용할 수있는 get_called_class이 있습니다.

+0

$ this는 정적의 – topherg

+0

@cgoddard에 대해 작동하지 않습니다. 내 인상은 이것이 싱글 톤의 형식이며 get_class에 대한 참조를 전달할 수 있다는 것입니다. 나는 그것을 잘못 읽었을 수도 있지만 여전히'get_class'는'__CLASS__' (인스턴스가 있다고 가정)을 피할 것입니다. [전체 클래스가 정적 인 경우 일반적으로'new static ($ args)'를 반환하지 않습니다. btw] –

+0

이 시점에서 인스턴스화되지 않았지만 나중에 수행합니다. – topherg

0

의 피할 수없는, 그런 다음 그 끝이 아닌, 당신은 self을 사용할 수 있는지

protected static $cn = __CLASS__; 

를두고 피하려고 만하고있다.

class SomeClass { 

    private static $instance; 

    public static function getInstance() { 

      if (self::$instance) { 
       // ... 
      } 

    } 

} 

CodePad.

+0

@cgoddard 하위 클래스링 중입니까? – alex

관련 문제