我有一个类,它具有从数据库中检索子元素的功能。以下代码将是伪造的,因为我希望它尽可能简单。
abstract class SomeHostObject extends SomeObject {
function getChild($identifier) {
global $database;
$id = $database->select('Some MySQL Query');
// that is the problem
return ?new? ???($id);
}
}
如您所见,SomeHostObject
类是抽象类,必须对其进行扩展。
问题是 getChild()
不应该返回一个 SomeHostObject
实例(不仅因为它甚至不能被实例化)而是一个类的新实例扩展 SomeHostObject
。
例如,如果有一个扩展 SomeHostObject
的 PageObject
类,函数 getChild()
应该返回一个新的 PageObject
具有新 ID 的实例。
我不知道该不该称这个问题为“高级”问题,但对我来说这是一个主要问题。
最佳答案
abstract class SomeHostObject extends SomeObject {
function getChild($identifier) {
global $database;
$id = $database->select('Some MySQL Query');
// that is the problem
return $this->createObject($id);
}
abstract protected function createObject($id);
}
class PageObject extends SomeHostObject
{
protected function createObject($id)
{
return new PageObject($id);
}
}
关于php - 在抽象类方法中返回抽象类的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1688334/