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

有没有一种简单的方法来重用函数中的代码,而不是重复?

有没有一种简单的方法来重用函数中的代码,而不是重复?

PHP
繁星coding 2022-01-08 20:32:56
我正在使用 Laravel 框架构建我的第一个 Web 应用程序。然而,模型开始变得非常忙碌,我注意到重复的代码——尤其是在函数中。我的编码经验非常有限,所以我对在函数内部进行重构和将函数拆分成一小段代码很有信心,这只有一项任务。但是...我想知道是否有任何方法可以轻松地重用函数中的代码?我附上了一个我想重构的代码示例 - 这是一个小例子,因为我有一些模型,这些类型的重复发生 4-5 次,现在很难阅读。如您所见,这两个函数之间的唯一区别是它们名称中的 IsPast / IsFuture 文本和 $date 上的调用。谁能推荐我如何重构这段代码?public function getIsPastAttribute(): bool{    return $this->date_period->map(static function ($date) {        /** @var Carbon $date */        return $date->isPast();    })->contains(false) === false;}public function getIsFutureAttribute(): bool{    return $this->date_period->map(static function ($date) {        /** @var Carbon $date */        return $date->isFuture();    })->contains(false) === false;}
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

尝试动态命名函数


public function getIsPastAttribute(): bool

{

    return $this->isDate('isPast');

}


public function getIsFutureAttribute(): bool

{

    return $this->isDate('isFuture');

}


public function isDate($tense): bool

{

    return $this->date_period->map(static function ($date) use ($tense) {

        /** @var Carbon $date */

        return $date->$tense();

    })->contains(false) === false;

}


查看完整回答
反对 回复 2022-01-08
?
月关宝盒

TA贡献1772条经验 获得超5个赞

对于您提供的两种特定方法,您可以这样做:


public function getTimeAttribute($time): bool

{

    return $this->date_period->map(static function ($date) use($time) {

       /** @var Carbon $date */

       return $time == 'future' ? $date->isFuture() : $date->isPast();

    })->contains(false) === false;

}

您可以使用在主要方法中调用的较小的“子方法”来减少代码重复。而不是这样做:


public function f1() {

    ...a lot of duplicate code

}


public function f2() {

    ...a lot of duplicate code

}

你可以这样做:


private function helper() {

    ...a lot of duplicate code

}


public function f1() {

    $this->helper();

}


public function f2() {

   $this->helper();

}

您还可以查看特征


查看完整回答
反对 回复 2022-01-08
?
呼唤远方

TA贡献1856条经验 获得超11个赞

我使用特征在许多控制器中使用相同的功能。


在 Http 目录中,创建一个名为 Traits 的新目录,这是一个 Trait 的示例:


应用程序/Http/Traits/MyTrait.php


<?php


namespace App\Http\Traits;



trait MyTrait{  

   public function myTraitFunction(){

     ...

   }

}


您可以像这样在控制器中使用:


<?php


namespace App\Http\Controllers;



use App\Http\Traits\MyTrait;


class MyController extends Controller{


    use MyTrait;


    public function controllerFunction(){

        //calling the trait function

        $this->myTraitFunction();

        ...

    }   

}


查看完整回答
反对 回复 2022-01-08
  • 3 回答
  • 0 关注
  • 130 浏览

添加回答

举报

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