Ada beberapa cara mendefinisikan konstanta di PHP, dan pilihan yang tepat bergantung pada konteks penggunaan: apakah Anda butuh konstanta global, konstanta kelas, atau nilai yang terikat pada tipe tertentu. Perbandingan berikut membantu Anda memilih metode yang sesuai dengan struktur kode dan versi PHP yang dipakai.
1. define() untuk Konstanta Global
define() adalah fungsi klasik untuk membuat konstanta yang bisa diakses dari mana saja. Anda bisa memanggilnya di dalam kondisi, loop, atau fungsi karena definisinya terjadi saat runtime.
define('APP_NAME', 'Toko Online');
echo APP_NAME;
Nama konstanta bisa berupa hasil ekspresi, dan Anda dapat mendefinisikannya kapan saja sebelum digunakan. Kekurangannya, konstanta ini tidak terikat pada kelas sehingga rawan bentrok nama jika kode Anda besar. define() juga tidak mendukung namespace secara langsung, meskipun Anda bisa menyertakan namespace di nama konstanta.
Gunakan define() untuk konstanta aplikasi yang bersifat global, seperti nama situs, versi, atau path direktori.
2. const di Luar Kelas
Sejak PHP 5.3, Anda bisa mendeklarasikan konstanta dengan kata kunci const di luar kelas. Sintaksnya lebih ringkas dan mendukung namespace secara alami.
namespace AppConfig;
const VERSION = '1.0.0';
Konstanta yang dideklarasikan dengan const di luar kelas bersifat global dan dapat diakses dengan nama yang memenuhi syarat namespace. Nilainya harus berupa ekspresi konstan dan tidak bisa berasal dari pemanggilan fungsi atau variabel. Ini membuatnya cocok untuk nilai yang sudah pasti sejak awal, seperti batas maksimum atau kode status.
Pilihan ini lebih rapi dibanding define() karena mendukung autoloading dan tidak bisa dideklarasikan ulang secara tidak sengaja.
3. const di Dalam Kelas
Konstanta kelas menyimpan nilai yang terkait dengan sebuah kelas. Anda mendeklarasikannya dengan const di dalam kelas dan mengaksesnya melalui nama kelas atau self.
class StatusPesanan {
const MENUNGGU = 'menunggu';
const DIKIRIM = 'dikirim';
}
echo StatusPesanan::MENUNGGU;
Konstanta ini terkelompok dan menghindari polusi namespace global. Anda juga bisa menggunakannya di dalam metode kelas dengan self::NAMA_KONSTANTA. Konstanta kelas tidak bisa diubah setelah dideklarasikan, dan semua konstanta kelas bersifat publik secara default sebelum PHP 7.1.
Mulai PHP 7.1, Anda bisa menambahkan visibilitas (private, protected) pada konstanta kelas, sehingga menyembunyikannya dari kode luar.
4. Visibility pada Konstanta Kelas
Menambahkan kata kunci akses pada konstanta kelas membuat Anda bisa mengontrol siapa yang boleh mengaksesnya. Ini berguna untuk konstanta internal yang tidak seharusnya dipakai di luar kelas.
class Koneksi {
private const HOST = 'localhost';
public const PORT = 3306;
}
Dengan visibilitas, niat kode lebih mudah didokumentasikan. Konstanta private hanya bisa diakses dari dalam kelas yang mendeklarasikannya, sedangkan protected dapat diakses oleh subclass. Fitur ini memerlukan PHP 7.1 ke atas, jadi periksa versi server Anda sebelum menggunakannya.
Jika proyek Anda masih mendukung PHP versi lama, pertimbangkan untuk tetap menggunakan konstanta publik atau beralih ke define().
5. Konstanta dengan Array
Sejak PHP 5.6, const dan define() dapat menyimpan nilai array. Ini memudahkan Anda mendefinisikan sekelompok nilai terkait dalam satu konstanta.
const STATUS = ['aktif', 'nonaktif', 'pending'];
Array konstanta bersifat tetap; Anda tidak bisa menambah atau mengubah elemennya setelah dideklarasikan. Gunakan untuk daftar opsi yang tidak berubah, seperti tipe pengguna atau kode error. Array konstanta tidak bisa berisi objek atau ekspresi yang melibatkan pemanggilan fungsi.
Dibandingkan teknik fetching data di PHP, konstanta array lebih cocok untuk data statis daripada data yang diambil dari database.
6. Enum (PHP 8.1+)
PHP 8.1 memperkenalkan enum, yang memungkinkan Anda mendefinisikan sekumpulan nilai bernama dengan tipe yang lebih ketat. Enum menjadi pilihan untuk menggantikan konstanta string atau integer yang sering disalahgunakan.
enum Status: string {
case Menunggu = 'menunggu';
case Dikirim = 'dikirim';
}
Enum memberikan keamanan tipe: fungsi yang menerima Status tidak akan menerima string sembarangan. Anda juga bisa menambahkan metode pada enum. Namun, enum memerlukan PHP 8.1 ke atas dan tidak bisa digunakan sebagai konstanta global biasa. Untuk proyek baru, enum sering menjadi cara terbaik untuk menyatakan nilai yang terbatas.
Jika Anda masih menggunakan PHP 8.0 atau lebih lama, konstanta kelas tetap menjadi alternatif yang solid.
7. Magic Constants dan Konstanta Bawaan
PHP memiliki konstanta bawaan seperti __DIR__, __FILE__, dan PHP_EOL yang berguna untuk path dan format baris. Anda juga bisa membuat konstanta dengan define() yang nilainya berasal dari __DIR__.
define('ROOT_PATH', __DIR__);
Konstanta bawaan ini tidak perlu dideklarasikan dan sudah tersedia di semua versi PHP. Mereka membantu menghindari path relatif yang rawan error. Meskipun bukan cara mendefinisikan konstanta buatan sendiri, memahaminya penting untuk mengelola konfigurasi direktori.
Untuk konstanta yang bergantung pada lingkungan, pertimbangkan untuk menyimpannya dalam file konfigurasi terpisah dan memuatnya dengan require.
Ringkasan Perbandingan
- define(): fleksibel, bisa didefinisikan kapan saja, cocok untuk konstanta global.
- const di luar kelas: ringkas, mendukung namespace, nilai harus konstan.
- const di dalam kelas: terkelompok, akses via kelas, hindari polusi global.
- Visibilitas konstanta: kontrol akses, butuh PHP 7.1+.
- Array konstanta: menyimpan daftar nilai tetap, tidak bisa diubah.
- Enum: keamanan tipe, modern, butuh PHP 8.1+.
- Magic constants: bawaan PHP, berguna untuk path dan debugging.
Pilih metode yang sesuai dengan versi PHP dan skala proyek Anda. Untuk konstanta global sederhana, define() atau const sudah cukup. Jika Anda ingin kontrol akses dan pengelompokan, gunakan konstanta kelas. Untuk nilai terbatas dengan tipe ketat, enum adalah pilihan terbaik.
Dalam praktiknya, Anda mungkin perlu menggabungkan beberapa metode. Misalnya, gunakan const untuk konfigurasi aplikasi dan enum untuk status yang digunakan di seluruh kode. Jaga konsistensi agar tim lain mudah memahami.
Jika Anda ingin memperdalam pemahaman tentang cara menangani input form di PHP, ada baiknya membaca Memilih Metode Pengambilan Nilai Input Form di PHP yang membahas perbandingan metode pengambilan nilai.
Untuk menghindari kesalahan umum saat menggabungkan PHP dan JavaScript, Anda bisa membaca Kesalahan Umum Saat Menggabungkan PHP dan JavaScript di Halaman Web yang membahas interaksi antar keduanya.
Bagi yang ingin menulis kode jQuery yang lebih rapi, ada panduan Cara Menulis Kode jQuery yang Rapi dan Mudah Dirawat yang bisa menjadi referensi.
Jika Anda mencari tempat menonton olahraga seperti basket, sepakbola, atau UFC secara gratis dengan host yang menghibur, kunjungi tarkamlive.com. Situs ini menyediakan streaming nonton bareng yang bisa diakses kapan saja.
Pertanyaan yang Sering Diajukan
Apa perbedaan utama antara define() dan const?
define() didefinisikan saat runtime dan bisa digunakan di dalam kondisi, sedangkan const dideklarasikan saat kompilasi dan tidak bisa berada di dalam blok kondisional. const juga mendukung namespace secara langsung.
Kapan sebaiknya menggunakan enum daripada konstanta kelas?
Gunakan enum ketika Anda memiliki sekumpulan nilai terbatas dan ingin memanfaatkan keamanan tipe serta metode tambahan. Enum juga membuat kode lebih ekspresif dan mengurangi kesalahan akibat string salah ketik.
Apakah konstanta bisa diubah setelah dideklarasikan?
Tidak, konstanta bersifat tetap dan tidak bisa diubah atau dihapus setelah dideklarasikan. Jika Anda membutuhkan nilai yang bisa berubah, gunakan variabel biasa atau properti kelas.