php 类的公共方法,关于php:在限制公共访问的同时仍然允许从父类访问的方式覆盖子类中的公共方法?...

我有一个通用的集合类,具有各种公共getter方法。

要从集合中获取一个项,请调用get()。还有几种返回多个项目的方法:getmany()、getrange()、getall()、find()、findall()、query()、queryany()等。

在内部,返回多个项的所有这些方法都有一个循环,当它们聚合要返回的单个项时,会重复调用get()。

一个简单的例子:

public function get($key){

return $this->collection[$key];

}

public function getMany($keys){

$many = array();

foreach ($keys as $key){

$many[] = $this->get($key);

}

return $many;

}

当我希望以一种我不希望客户机能够从集合中访问单个项的方式扩展集合时,问题就出现了。基本上,我想禁止访问get()方法。

我不能使get()成为私有或受保护的函数,因为它在父类中是公共的。

我也不能重写get(),因为其他所有方法都依赖get(),我希望它们保持功能性。

我知道我可以重写所有依赖get()的方法来依赖一些新的受保护方法(即get on e()),但这将违反dry原则。

我不想做的:

class DataSet extends Collection{

public function get(){

throw new Exception('get() not implemented in DataSet');

}

protected function getOne($key){

return parent::get($key);

}

public function getMany($keys){

$many = array();

foreach ($keys as $key){

$many[] = $this->getOne($key);

}

return $many;

}

}

如果我做了上面的操作,我将不得不重写六个方法(其中一些方法非常复杂),它们与父类的方法只相差几个字符。

所以…我还有其他的选择吗?对于同一个目的有不同的方法吗…?

您可以做的是使受保护的方法称为_get,这可以是所有方法内部调用的方法。然后,您可以在所有需要访问的类上公开一个get方法,并让它调用_get。

哦!这就是解决办法,藏在显眼的地方。我所有的工作都集中在子类中寻找解决方案——我没有考虑更改父类。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值