プログラミング言語としての PHP の問題の 1 つは、継承が単一しかできないことです。これは、クラスは別のクラスからのみ継承できることを意味します。たとえば、コードの重複を防ぐには、2 つの異なるクラスからメソッドを継承するのが最善です。 PHP 5.4 では、Traits と呼ばれる新しい言語機能が追加され、Laravel フレームワークで広く使用されています。
# Trait は、PHP などの単一継承言語でコードを再利用するためのメカニズムです。トレイトは、開発者が異なるクラス階層に存在する複数の独立したクラスでメソッドのセットを自由に再利用できるようにすることで、単一継承の制限の一部を軽減するように設計されています。トレイトとクラス構成のセマンティクスは、複雑さを軽減し、多重継承とミックスインに関連する典型的な問題を回避する方法で定義されています。
トレイトはクラスに似ていますが、機能をきめ細かく一貫した方法でグループ化するためにのみ使用されます。特性自体をインスタンス化することはできません。これは従来の継承を補完し、動作の水平構成を可能にします。つまり、クラス メンバーのアプリケーションは継承を必要としません。
PHP トレイトとは何ですか?
トレイトとは、単に別のクラスに含めるメソッドのセットです。抽象クラスと同様に、特性自体をインスタンス化することはできません。
特性の例は次のとおりです:
trait SharePost { public function share($item) { return 'share this post'; } }
この特性を次のように他のクラスに含めることができます:
class Post { use SharePost; } class Comment { use SharePost; }
次に、特性を取得したい場合は、これらのクラス で新しいオブジェクトを作成すると、それらはすべて利用可能な share() メソッドを持っていることがわかります:
$post = new Post; echo $post->share(''); $comment = new Comment; echo $comment->share('');
trait どのように機能するのでしょうか?
上記の例からわかるように、メソッドは定義されていませんが、Post オブジェクトと Comment オブジェクトの両方で利用可能な share() メソッドがあります。
Trait は基本的に、実行時にコードを「コピーして貼り付ける」方法にすぎません。
これは、Trait が Post クラスと Comment クラスにコピーされることを意味するため、新しいインスタンスをインスタンス化すると、share() メソッド コードが使用可能になります。
私は、将来の機能追加を迅速に完了し、新しいプロジェクトが以前のアイデアを簡単に拡張できるように、コードとコードの構造を頻繁に見直します。
laravel でトレイトを使用するにはどうすればよいですか?
TraitBrandsTrait.php
use App\Http\Traits\BrandsTrait; class YourController extends Controller { use BrandsTrait; public function addProduct() { $brands = $this->brandsAll(); } }
これが私の BrandsTrait.php
<?php namespace App\Http\Traits;use App\Brand; trait BrandsTrait { public function brandsAll() { // 从品牌表中获取所有品牌 $brands = Brand::all(); return $brands; } }という Trait を含む Trait ディレクトリを Http ディレクトリに作成しました
以上がPHP LaravelのTraitとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。