Menulis nama lengkap seperti \App\Models\Pengguna pada setiap pemakaian class membuat kode cepat dipenuhi baris panjang yang sulit dibaca. Statement use hadir sebagai solusi: statement tersebut mendaftarkan nama pendek lokal yang merujuk ke simbol dari namespace mana pun. Pada chapter ini kita akan mempelajari cara meng-import class dengan use, cara khusus untuk function dan constant, teknik import beregu dengan group use, serta perilaku PHP ketika sebuah import menunjuk ke class yang tidak pernah didefinisikan.

Meng-import Class dengan use #

Bentuk dasar sebuah import adalah kata kunci use yang diikuti nama lengkap class, misalnya use App\Models\Pengguna;. Setelah baris tersebut, seluruh kode di berkas yang sama boleh menuliskan nama pendek Pengguna saja. Agar contoh dapat dijalankan sebagai satu berkas utuh, kita memakai sintaks kurung kurawal yang memungkinkan beberapa namespace berdampingan dalam satu berkas: satu blok berisi definisi class, satu blok lainnya berisi kode utama yang melakukan import.

php
<?php
namespace App\Models {
    class Pengguna
    {
        public static function deskripsi(): string
        {
            return "Class Pengguna dari namespace App\\Models";
        }
    }
}

namespace App\Layanan {
    use App\Models\Pengguna;

    echo Pengguna::deskripsi(), "\n";
    echo Pengguna::class, "\n";
}

Output yang Dihasilkan:

text
Class Pengguna dari namespace App\Models
App\Models\Pengguna

Mari kita telaah peran setiap bagian pada contoh di atas:

  1. Blok namespace App\Models { ... }: mendefinisikan class Pengguna di dalam namespace App\Models.
  2. Blok namespace App\Layanan { ... }: kode utama berada di namespace yang berbeda, sehingga nama Pengguna tidak otomatis mengacu ke class tersebut.
  3. Baris use App\Models\Pengguna;: mendaftarkan alias lokal; sejak baris ini, penulisan Pengguna di dalam blok App\Layanan merujuk ke App\Models\Pengguna.
  4. Pengguna::class: konstanta class menampilkan nama lengkap yang benar-benar dipakai interpreter, membuktikan bahwa import tidak mengubah identitas asli class.

Meng-import Function dan Constant #

Tanpa keterangan tambahan, use selalu dianggap meng-import class. Function dan constant membutuhkan kata kunci pendamping: use function untuk function dan use const untuk constant. Pemisahan ini penting karena PHP memperbolehkan nama pendek yang sama dipakai untuk class, function, dan constant sekaligus di dalam satu berkas.

php
<?php
namespace App\Util {
    const BATAS_MAKSIMAL = 100;

    function formatRupiah(int $nilai): string
    {
        return "Rp" . number_format($nilai, 0, ",", ".");
    }
}

namespace Aplikasi {
    use function App\Util\formatRupiah;
    use const App\Util\BATAS_MAKSIMAL;

    echo formatRupiah(1500000), "\n";
    echo "Batas: ", BATAS_MAKSIMAL, "\n";
}

Output yang Dihasilkan:

text
Rp1.500.000
Batas: 100

Berikut penjelasan bagian-bagian pentingnya:

  1. use function App\Util\formatRupiah;: membuat nama pendek formatRupiah di dalam blok Aplikasi merujuk ke function App\Util\formatRupiah.
  2. use const App\Util\BATAS_MAKSIMAL;: aturan yang sama berlaku untuk constant BATAS_MAKSIMAL.
  3. Pemanggilan formatRupiah(1500000): tanpa import, PHP mencari Aplikasi\formatRupiah, tidak menemukannya, lalu jatuh ke function global yang juga tidak ada — hasilnya pesan galat undefined function.

Import Beregu dengan Group Use #

Proyek nyata sering membutuhkan banyak simbol dari satu namespace yang sama. Menulis statement use berulang-ulang untuk setiap nama membuat daftar import di bagian atas berkas membengkak. Sejak PHP 7, kita dapat mengelompokkan beberapa simbol dalam satu statement dengan tanda kurung kurawal; teknik ini disebut group use.

php
<?php
namespace App\Models {
    class Produk {}
    class Kategori {}
}

namespace App\Services {
    class Keranjang {}
}

namespace Aplikasi {
    use App\Models\{Produk, Kategori};
    use App\Services\Keranjang;

    echo Produk::class, "\n";
    echo Kategori::class, "\n";
    echo Keranjang::class, "\n";
}

Output yang Dihasilkan:

text
App\Models\Produk
App\Models\Kategori
App\Services\Keranjang

Pada contoh di atas, use App\Models\{Produk, Kategori}; meng-import dua class sekaligus dari namespace App\Models, sedangkan use App\Services\Keranjang; tetap memakai bentuk satu nama. Hasil ::class menunjukkan setiap nama pendek tetap menunjuk ke nama lengkap masing-masing. Ketika sebuah namespace menyediakan banyak simbol yang dipakai bersamaan, group use menjaga bagian atas berkas tetap ringkas dan mudah dipindai.

Import yang Tidak Terresolusi #

Statement use tidak pernah memeriksa apakah class yang ditunjuk benar-benar ada; PHP hanya mencatat aliasnya pada saat kompilasi. Akibatnya, salah ketik pada namespace di baris use tidak langsung terdeteksi. Galat baru muncul pada baris pertama yang benar-benar memakai class tersebut, seperti pada contoh berikut.

php
<?php
namespace Aplikasi;

use App\Models\Pengguna;

$pengguna = new Pengguna();

Output yang Dihasilkan:

text

Fatal error: Uncaught Error: Class "App\Models\Pengguna" not found in /home/z/my-project/php-course/content/php/namespaces-dan-autoloading/namespace-imports/.verify_tmp.php:6
Stack trace:
#0 {main}
  thrown in /home/z/my-project/php-course/content/php/namespaces-dan-autoloading/namespace-imports/.verify_tmp.php on line 6

Pesan Class "App\Models\Pengguna" not found muncul karena operasi new membutuhkan definisi class yang nyata, sementara alias Pengguna hanya mengarah ke nama yang tidak pernah didefinisikan di dalam skrip ini. Perhatikan bahwa titik kegagalan berada di baris new, bukan di baris use; inilah alasan kesalahan import sering membingungkan pemula. Skrip berhenti sebagai fatal error, sehingga kesalahan semacam ini sebaiknya tertangkap sejak pengujian awal, bukan saat aplikasi berjalan di produksi.

Ringkasan #

  • use App\Models\Pengguna; memberi nama pendek lokal untuk sebuah class pada berkas tersebut.
  • use function dan use const wajib dipakai untuk meng-import function dan constant.
  • Group use seperti use App\Models\{Produk, Kategori}; merapatkan banyak import dari satu namespace.
  • Import tidak memuat berkas dan tidak memeriksa keberadaan class; galat baru muncul saat class pertama kali dipakai.

Dengan import, kode kita sudah jauh lebih bersih. Namun terkadang kita membutuhkan bentuk nama yang menembus semua alias — misalnya memanggil class bawaan PHP dari dalam namespace. Bentuk nama absolut yang diawali backslash tersebut akan kita bahas pada chapter Fully Qualified Names berikutnya.

Referensi #