为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel/PHP 重构代码以使用相同的不同模式

Laravel/PHP 重构代码以使用相同的不同模式

PHP
侃侃尔雅 2021-06-07 21:26:54
我正在使用 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 中的抽象类并在其之前初始化模型。


查看完整回答
反对 回复 2021-06-13
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信