- Interface - це контракт: перелік методів, які клас зобов'язаний реалізувати. Не містить реалізації.
- Trait - механізм повторного використання коду: набір готових методів, які «вмішуються» в клас (горизонтальне перевикористання).
interface Loggable { public function logChannel(): string; }
// реалізація для багатьох моделей
trait HasUuid
{
public static function bootHasUuid(): void { /* ... */ }
}
class Order extends Model implements Loggable
{
use HasUuid;
public function logChannel(): string { return 'orders'; }
}
У Laravel трейти всюди: SoftDeletes, HasFactory, Notifiable. Інтерфейси («контракти») дають змогу підміняти реалізації через контейнер.