Laravel自定义助手与特质

问题描述 投票:1回答:1

我正在尝试创建一些将在我的代码中使用更多时间的帮助程序,创建自定义帮助程序和使用trait有什么区别?防止自定义帮助程序或trait导致代码冗余的最佳实践是什么?>

我正在尝试创建一些将在我的代码中使用更多时间的帮助程序,创建自定义帮助程序和使用trait有什么区别,使用...防止代码冗余的最佳实践是什么? [

为什么是特质?
我们知道

PHP仅支持单一继承:子类只能从一个单一父类继承。

所以特质诞生了,如果一个班级需要继承多种行为,,我们可以使用许多特质。并且不同的类可以使用一个特征。

什么是特质?

特性是

类似于类

,但

仅用于分组功能

以细粒度且一致的方式。 无法单独实例化特性。
什么是助手?

Helper只是一个类。您可以定义许多常见的PHP函数。

助手与特质:


大多数时候,我认为您可以使用帮助程序或Trait来防止代码冗余。

我认为

特质是从模型中抽象通用方法的一种很好的方法

并且如果某些方法是另一个类的方法

,我认为使用Trait比帮助程序更好。

对于特质:

// Trait: trait Valid { public function scopeValid($query) { return $query->where('status', 1); } } // Models: User use App\Traits\Valid; class User extends Models { use Valid; // So you can use every methods from valid traits. } User::valid()->get(); // Models: Post use App\Traits\Valid; class Post extends Models { use Valid; // So you can use every methods from valid traits. } Post::valid()->get();

对于助手:
// In Helper:
class ValidHelper
{
    public function scopeValid($query) {
        return $query->where('status', 1);
    }    
}


// Models: User
use App\Helpers\ValidHelper;
class User extends Models {
    public function scopeValid($query) {
        return (new ValidHelper())->scopeValid($query);
    }
}
User::valid()->get();


// Models: Post
use App\Helpers\ValidHelper;
class Post extends Models {
    public function scopeValid($query) {
        return (new ValidHelper())->scopeValid($query);
    }
}

因此请使用帮助程序使代码冗余。
有时我想

直接使用方法而不是通过另一个类

有时(仅用于一类的抽象方法,并且不想更改tha类

,就像Laravel's global Helper

我认为助手比特质更好。

php laravel oop traits helper
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.