2012-04-10 6 views
2

Ich habe zwei Klassen, Isbn10 und Isbn13 implementiert. Ich möchte eine Klasse isbn erstellen, so dass, wenn instanziiert ich ein Objekt vom Typ ISBN10 oder ISBN13 erhalten, entsprechend einem Parameter an die isbn Klassenkonstruktors gegeben:Instanziieren Sie die richtige Unterklasse von einer Elternklasse

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

Ich weiß, dass ich etwas tun könnte mit eine statische Methode:

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

Aber wäre es möglich, die ISBN-Nummer Klasse zu instanziiert und automatisch ein ISBN13 Objekt (oder ISBN10) erhalten?

Antwort

1

Nein. Die Verwendung einer statischen "Factory" -Methode, wie Sie sie beschrieben haben, ist die richtige Vorgehensweise. In stark typisierten Sprachen kann dies besser gehandhabt werden, aber nicht in PHP. Dies liegt daran, dass Konstruktoren das Objekt nicht zurückgeben, sondern nur erstellen.

+0

Danke, ich hatte das Gefühl, dass es nicht möglich ist, die beste Lösung, die ich denke, wäre die Implementierung einer einzelnen ISBN-Klasse. – moray

Verwandte Themen