2012-04-10 23 views
2

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

しかし、ISBNクラスをインスタンス化し、自動的にISBN13オブジェクト(またはisbn10)を得ることができるだろうか?

答えて

1

いいえ説明したような静的な「ファクトリ」方法を使用することは、これを正しく行う方法です。強く型付けされた言語では、これはPHPで扱われない方が良いでしょう。これは、コンストラクタがオブジェクトを返さず、オブジェクトを作成するだけだからです。

+0

ありがとう、私はそれができないと感じました、私は単一のisbnクラスを実装すると思う最良のソリューションです。 – moray

関連する問題