亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有一種簡單的方法來重用函數中的代碼,而不是重復?

有沒有一種簡單的方法來重用函數中的代碼,而不是重復?

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條經驗 獲得超8個贊

嘗試動態命名函數


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 關注
  • 156 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號