2012-04-10 10 views
2

Я реализовал два класса: isbn10 и isbn13. Я хотел бы создать класс ISBN, так что, когда экземпляр я получить объект типа isbn10 или ISBN13, в соответствии с параметром данного классу ISBN конструктора:Создайте правильный подкласс из родительского класса

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

Я знаю, что я мог бы сделать что-то подобное с статический метод:

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'); 

Но было бы возможно создать экземпляр класса и автоматически ISBN получить объект ISBN13 (или isbn10)?

ответ

1

№ Использовать статический «заводский» метод, как вы описали, является способом правильного выполнения этого. На сильно типизированных языках это можно лучше обработать, но не в PHP. Это потому, что конструкторы не возвращают объект, они просто создают его.

+0

Спасибо, у меня было ощущение, что это невозможно, лучшее решение, я думаю, будет реализовывать один класс isbn. – moray

Смежные вопросы