Простір імен - префікс до назв класів, функцій і констант, щоб різні бібліотеки могли мати класи з однаковими іменами: App\Models\User і Laravel\Socialite\Two\User - різні класи.
namespace App\Services\Billing;
use App\Models\Order;
use Illuminate\Support\Facades\Log;
use Stripe\Invoice as StripeInvoice; // псевдонім, щоб не конфліктувати з нашим Invoice
final class Invoice
{
public function sync(Order $order, StripeInvoice $remote): void { /* ... */ }
}
use не підключає файл і нічого не завантажує - лише створює коротке ім'я для повного. Клас завантажить автозавантажувач у момент першого використання.
Як PHP розв'язує ім'я класу:
- Повне ім'я з
\на початку - як є:\DateTime. - Ім'я з
use- підставляється повне. - Інакше - до імені додається поточний простір імен:
new DateTime()уApp\ServicesшукатимеApp\Services\DateTime. Звідси класична помилка «Class App\Services\DateTime not found» - потрібенuse DateTime;чи\DateTime.
Функції й константи розв'язуються інакше: якщо в поточному просторі функції немає, PHP шукає глобальну (strlen працює без \). Явний \strlen() чи use function strlen; трохи пришвидшує виклик, бо рушій не перевіряє простір імен, і дозволяє OPcache оптимізувати вбудовані функції.
Простори імен і PSR-4: простір імен відповідає каталогу (App\Services\Billing → app/Services/Billing), а ім'я класу - файлу. На цьому збігу тримається автозавантаження.
::class дає повне ім'я класу рядком: Invoice::class → 'App\Services\Billing\Invoice' - так посилаються на класи в конфігурації без помилок у рядках.