Php 从父类实例化正确的子类

Php 从父类实例化正确的子类,php,Php,我实现了两个类,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 . '/',

我实现了两个类,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)?

否。使用静态“工厂”方法(如您所述)是正确执行此操作的方法。在强类型语言中,这可以得到更好的处理,但在PHP中则不然。这是因为构造函数不返回对象,他们只是创建它。

谢谢,我觉得这是不可能的,我认为最好的解决方案是实现一个isbn类。