2012-04-10 7 views
2

두 클래스 인 isbn10과 isbn13을 구현했습니다.부모 클래스에서 올바른 서브 클래스를 인스턴스화하십시오.

$isbn_code = new isbn('978-3-16-148410-0'); 

내가 함께 같은 것을 할 수 알고 : 나는 ISBN 클래스 생성자에 주어진 파라미터에 따라, 인스턴스화 때 유형 ISBN10 또는 ISBN13의 객체를 얻을 수 있도록 클래스 ISBN을 만들고 싶습니다 정적 방법 :

class isbn { 
    public static function new($isbn) { 
     if (preg_match('/' . isbn13::isbn_regex . '/', $isbn)) { 
      return new isbn13($isbn); 
     } else if (preg_match('/' . isbn10::isbn_regex . '/', $isbn)) { 
      return new isbn10($isbn); 
     } else { 
      throw new Exception("Invalid ISBN code", 1); 
     } 
    } 

} 

$isbn_code = isbn::new('978-3-16-148410-0'); 

그러나 IT는 ISBN 클래스를 인스턴스화하고 자동으로 ISBN13 객체를 취득 (또는 ISBN10) 할 수 있을까요?

답변

1

아니요. 설명한 '정적' '공장'방법을 사용하면 올바르게 수행 할 수 있습니다. 강력하게 형식화 된 언어에서는 이것이 더 잘 처리 될 수 있지만 PHP에서는 그렇지 않습니다. 이는 생성자가 객체를 반환하지 않고 객체를 생성하기 때문입니다.

+0

감사합니다. 나는 할 수없는 느낌이 들었습니다. 단일 isbn 클래스를 구현하는 것이 최선의 해결책이라고 생각합니다. – moray

관련 문제