4

isbn10 と isbn13 の 2 つのクラスを実装しました。クラス 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) を取得することは可能でしょうか?

4

1 に答える 1

1

いいえ、あなたが説明したような静的な「ファクトリー」メソッドを使用することは、これを適切に行う方法です。強く型付けされた言語では、これはより適切に処理できますが、PHP ではそうではありません。これは、コンストラクターがオブジェクトを返さず、作成するだけだからです。

于 2012-04-10T23:48:04.330 に答える