【发布时间】:2014-01-21 09:13:26
【问题描述】:
在使用私有方法的继承/多态性时遇到了问题。
例子:
class cmsPage{
private function getBlock(){
$block = new cmsBlock();
return $block
}
function createBlock(){
$block = $this->getBlock();
$block->save();
}
//... do various things
}
class specialCmsPage extends cmsPage{
private function getBlock(){
$block = new specialCmsBlock();
return $block
}
}
我自然希望 specialCmsPage 继承 cmsPage 的所有方法。函数getBlock() 应确保添加到 specialCmsPage 的所有内容块的类型均为 specialCmsBlock 而不是 cmsBlock。
我发现,如果我从类方法中删除“私有”,它只会按照我期望的方式工作,但我更喜欢使用这些方法,因为不应该从类外部调用这些方法。
在 getBlock() 方法前面使用“private”时,specialCmsPage 总是会收到一个 cmsBlock 对象。
有没有办法使用“private”实现我想要的?
【问题讨论】:
-
getBlock看起来像一个坏函数。为什么会存在? -
你能告诉我们你用来初始化你的 specialCmsPage 并运行 getBlock 函数的代码吗?
-
getBlock 存在的原因是我可以使用“cmsPage”中的原始代码,但在“specialCmsPage”中使用时插入不同的对象。我不能在方法中使用“new”运算符,因此我创建了一个提供新子对象的可覆盖方法。
标签: php object inheritance polymorphism private