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