2012-04-10 64 views
2

我已经实现了两个类isbn10和isbn13。我想创建一个类ISBN,这样实例化时,我会得到ISBN10类型或网路书店的目的,根据给予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)?

回答

1

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

+0

谢谢,我有一种感觉无法完成,我认为最好的解决方案是实现一个isbn类。 – moray 2012-04-11 11:27:24