Php 有没有一种简单的方法可以在函数中重用代码,而不是复制?

Php 有没有一种简单的方法可以在函数中重用代码,而不是复制?,php,laravel,Php,Laravel,我正在使用Laravel框架构建我的第一个web应用程序。然而,模型开始变得非常繁忙,我注意到重复的代码——特别是在函数中 我在编码方面的经验非常有限,因此我对在函数内重构和将函数拆分成小代码越来越有信心,这只有一个任务 然而。。。我想知道是否有任何方法可以轻松地重用函数中的代码 我附上了一个我想重构的代码示例——这是一个小示例,因为我有一些模型,其中这些类型的重复发生了4-5次,现在很难看懂 如您所见,这两个函数之间的唯一区别是它们名称中的isast/IsFuture文本和$date上的调用

我正在使用Laravel框架构建我的第一个web应用程序。然而,模型开始变得非常繁忙,我注意到重复的代码——特别是在函数中

我在编码方面的经验非常有限,因此我对在函数内重构和将函数拆分成小代码越来越有信心,这只有一个任务

然而。。。我想知道是否有任何方法可以轻松地重用函数中的代码

我附上了一个我想重构的代码示例——这是一个小示例,因为我有一些模型,其中这些类型的重复发生了4-5次,现在很难看懂

如您所见,这两个函数之间的唯一区别是它们名称中的isast/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;
}

尝试使用动态命名的函数

公共函数getisStatAttribute():bool
{
返回$this->isDate('isPast');
}
公共函数getIsFutureAttribute():bool
{
返回$this->isDate('isFuture');
}
公共功能状态($时态):bool
{
返回$this->date\u period->map(静态函数($date)use($tense){
/**@var碳$date*/
返回$date->$tense();
})->包含(false)==false;
}

对于您提供的两种特定方法,您可以执行以下操作:

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;
}
private function helper() {
    ...a lot of duplicate code
}

public function f1() {
    $this->helper();
}

public function f2() {
   $this->helper();
}
您可以使用在主方法中调用的较小的“子方法”来减少代码重复。 而不是这样做:

public function f1() {
    ...a lot of duplicate code
}

public function f2() {
    ...a lot of duplicate code
}
您可以这样做:

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;
}
private function helper() {
    ...a lot of duplicate code
}

public function f1() {
    $this->helper();
}

public function f2() {
   $this->helper();
}

您还可以查看

我使用traits在许多控制器中使用相同的函数

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

App/Http/Traits/MyTrait.php

<?php

namespace App\Http\Traits;


trait MyTrait{  
   public function myTraitFunction(){
     ...
   }
}


参数是选项吗?不太熟悉Laravel语法,但可以使用布尔值确定要使用的
->is
的类型