Питання на співбесіді: PHP
Найпопулярніші питання з реальних Laravel/PHP співбесід для всіх рівнів
Всі теми
API
Artisan
Authentication
Authorization
Blade
Broadcasting
Caching
Collections
Database
Debugging
DevOps
Eloquent
Enums
Events
Filament
Files
HTTP та Request
Livewire
Mail
Middleware
MVC та архітектура
Notifications
Pagination
Performance
PHP
Queues
Routing
Scheduling
Search
Seeder
Service Container
Service Providers
Testing
Архітектура
Безпека
Валідація
Конфігурація
Локалізація
Масштабування
Міграції
Сесії
2 питання
- 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. Інтерфейси («контракти») дають змогу підміняти реалізації через контейнер.
PHP використовує підрахунок посилань + збирач циклічних посилань. У звичайному веб-запиті пам'ять звільняється наприкінці запиту, тож витоки малопомітні. Але у довготривалих процесах (черги, Octane) пам'ять накопичується.
Як уникати:
- Не зберігати стан у статичних властивостях/синглтонах між задачами.
unset()великих структур, скидати накопичувачі (логи запитівDB::flushQueryLog()).- Обробляти дані порціями (
chunk,lazy), не тримати все в пам'яті. - Перезапускати воркери за лімітом:
queue:work --max-jobs=1000 --max-time=3600або при досягненні--memory.
Octane має gc_collect_cycles()-хуки; Horizon автоматично перезапускає воркери, що «розпухли».