2010-07-15 5 views
2

내 응용 프로그램에 추상 기본 클래스가 있습니다.PHP에서 클래스 이름을 정의하지 않고 어떻게`factory` 메소드를 제대로 상속받을 수 있습니까?

정적 메서드로 새 모델을 쉽게 만들 수 있도록 factory() 메서드를 제공하고 싶습니다.

public static function factory() { 
    $class = __CLASS__;  
    return new $class; 
} 

이것은 분명히 추상 클래스를 시작하려고 시도하기 때문에 작동하지 않습니다.

내가 알고 싶었던 것은이 방법을 상속받은 클래스를 어떻게 만들 수 있습니까? 기본 클래스가 아닌 스스로 초기화 할 수 있습니까?

모델 이름을 초기화 메소드에 전달해야합니까?

PHP 버전은 5.2.13이지만,> = 5.3 PHP에서 사용하는 것에 대해서도 알고 싶습니다. PHP5.3에서

+0

PHP 5.3 또는 이전 버전에 대한 질문입니까? – kiamlaluno

답변

1

모델 이름을 초기화 메소드에 전달해야합니까? - 5.3 이전.

이것은 약간의 반 패턴입니다. 일반적으로 메소드를 추상으로 정의한 다음 각 클래스에 구현합니다.

내가 설명 할 수있는 가장 간단한 방법은 정적 메서드가 인스턴스 또는 컨텍스트 인식이 아닌 일반적인 기능을 정의하므로 문맥/인스턴스 데이터에 따라 약간 잘못 생각한 것입니다. 정적 메서드 내에서 if($this->property)을 작성하십시오.

1

, 당신은 "늦게 정적 바인딩"을 가지고 있고, 그것으로, 함수 get_called_class() :

$class = get_called_class(); 
return new $class; 

편집 : 할 수있는 쉬운 방법이 없다,이 PHP5.2입니다 고려 디버그 백 트레이스를 해킹하거나 리플렉션을 사용하지 않아도됩니다. 문제는 "자기"가 역 참조하지 않는다는 것입니다.

관련 문제