从父类实例化正确的子类

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)呢?

1个回答

1
不,在 PHP 中,像您所描述的那样使用静态的“工厂”方法是正确处理此操作的方式。在强类型语言中,这可以更好地处理,但在 PHP 中不行。这是因为构造函数不会返回对象,它们只是创建对象。

谢谢,我有一种感觉它无法完成,我认为最好的解决方案是实现一个单一的ISBN类。 - moray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接