我已经实施了两个类,isbn10和isbn13。我想创建一个类isbn,以便在实例化时,我将获得一个isbn10或isbn13类型的对象,根据给予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)吗?
答案 0 :(得分:1)
没有。使用静态“工厂”方法(如您所述)是正确执行此操作的方法。在强类型语言中,这可以更好地处理,但不能在PHP中处理。这是因为构造函数不返回对象,只是创建它。