我正在使用 Laravel (PHP)。我想重构下面的代码以要求 A 类和 B 类使用相同的 funsth()。funSth() 在两个类中重复,而唯一的区别是模型。有没有办法可以简化到下面?是否可以将其重构为第二个代码?当前的:class A { public function funSth(){ Models\Profile::create(); } public function main(){ $this->funA(); }}class B { public function funSth(){ Models\Location::create(); } public function main(){ $this->funB(); }}预期的:class A { public function main(){ (new Y)->funSth(); }}class B { public function main(){ (new Y)->funSth(); }}class Y { public function funSth(){ Models\AnyModel::create(); }}
2 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
经过一段时间的研究。这是我的解决方案。
use Illuminate\Database\Eloquent\Model;
trait Y
{
protected function create(Model $model, array $attributes){
model->create($attributes);
}
}
因此,对于 A 类和 B 类:
class A
{
use Y;
public function main($data){
$this->create((new Models\ModelAA), $data)
}
}
class B
{
use Y;
public function main($data){
$this->create((new Models\ModelBB), $data)
}
}
基本思想是使用Illuminate\Database\Eloquent\Modeltrait Y 中的抽象类并在其之前初始化模型。
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消