4

我已经实现了两个类,isbn10 和 isbn13。我想创建一个 isbn 类,以便在实例化时根据给定给 isbn 类构造函数的参数获得 isbn10 或 isbn13 类型的对象:

$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 回答