Variabel boleh berubah kapan saja, tetapi sebagian nilai justru harus dikunci: tarif pajak, batas maksimal transfer, nama aplikasi, atau versi protokol. Kesalahan menulis ulang nilai semacam itu bisa merusak perhitungan tanpa jejak peringatan. PHP menyediakan constants — pengenal bernilai tetap yang tidak bisa ditimpa maupun dihapus setelah didefinisikan. Pada chapter ini kita pelajari dua cara membuatnya, konstanta bawaan PHP yang berguna, serta beda tipis yang menentukan kapan memakai yang mana.

Constants Tidak Bisa Diubah #

Constant adalah pengenal bernilai tetap; setelah didefinisikan, nilainya melekat sampai program berakhir. PHP menyediakan dua sintaks pembuatan: fungsi define() dan keyword const. Mari kita lihat keduanya berdampingan:

php
<?php
define("HARGA_DEFAULT", 15000);
const PAJAK = 0.11;

echo HARGA_DEFAULT, "\n";
echo PAJAK, "\n";

var_dump(HARGA_DEFAULT * 2);
var_dump(HARGA_DEFAULT * (1 + PAJAK));

Output yang Dihasilkan:

text
15000
0.11
int(30000)
float(16650)

Mari kita telaah kode di atas:

  1. Baris 2 (define("HARGA_DEFAULT", 15000)): constant didefinisikan saat runtime dengan nama "HARGA_DEFAULT" dan nilai 15000.
  2. Baris 3 (const PAJAK = 0.11;): bentuk kedua memakai keyword const — nilainya harus bisa dihitung saat kompilasi.
  3. Baris 9-10: nilai constant dipakai persis seperti variabel, tetapi tanpa tanda $. Penulisan HARGA_DEFAULT * (1 + PAJAK) menghasilkan 16650 — harga default termasuk pajak.

Konsekuensi sifat tak-berubahnya terlihat bila kita mencoba menimpa: penugasan PAJAK = 0.2; memicu Parse error: syntax error, unexpected token "=" karena PAJAK bukan variabel sehingga parser tidak mengizinkannya jadi sisi kiri penugasan. Inilah perlindungan pertama constants — kesalahan tertangkap sebelum program berjalan, bukan diam-diam mengubah angka pajak.

define() vs const #

Keduanya sama-sama menghasilkan constant, tetapi dibedakan oleh waktu evaluasi dan tempat penulisan. const dievaluasi saat kompilasi sehingga nilainya harus berupa ekspresi konstan — literal, operasi aritmetika sederhana, array literal, atau constant lain yang sudah ada. define() dievaluasi saat runtime sehingga boleh memakai nilai hasil perhitungan apa pun, bahkan nama yang baru terbentuk dari gabungan string:

php
<?php
const BATAS_MIN = 1;
const BATAS_MAX = BATAS_MIN + 99;

$nama = "LIMIT_" . "TRANSAKSI";
define($nama, 250000);

echo BATAS_MAX, "\n";
echo LIMIT_TRANSAKSI, "\n";
var_dump(constant("LIMIT_TRANSAKSI"));
var_dump(defined("LIMIT_TRANSAKSI"), defined("TIDAK_ADA"));

Output yang Dihasilkan:

text
100
250000
int(250000)
bool(true)
bool(false)

Mari kita bedah baris pentingnya:

  1. Baris 2-3: BATAS_MAX sah karena BATAS_MIN + 99 adalah ekspresi konstan — seluruh operannya sudah diketahui saat kompilasi.
  2. Baris 5-6: nama "LIMIT_TRANSAKSI" dirangkai dari dua string lalu diberikan ke define() sebagai nama constant — hal mustahil dilakukan const, karena keyword tersebut menuntut nama tertulis eksplisit.
  3. Baris 10 (constant("LIMIT_TRANSAKSI")): fungsi constant() membaca nilai constant berdasarkan nama dalam bentuk string, pas untuk kasus nama yang tersimpan di variabel.
  4. Baris 11 (defined()): memeriksa keberadaan constant sebelum dipakai, mengembalikan true atau false — analog dari isset() pada variabel.

Tabel berikut merangkum perbedaan keduanya:

Aspekconst NAMA = nilai;define("NAMA", nilai)
Waktu evaluasiKompilasiRuntime
Nilai yang diperbolehkanEkspresi konstan sajaEkspresi apa pun
Nama dari variabelTidak bisaBisa (define($nama, ...))
Lokasi penulisanTop-level, class, interface, enumTop-level dan dalam fungsi
Kebutuhan umumNilai bawaan aplikasiNilai hasil konfigurasi runtime

Sebagai pedoman praktis: pakai const untuk nilai yang Anda ketahui sejak menulis kode, dan define() ketika nama atau nilainya baru tersedia saat program berjalan — misalnya hasil pembacaan environment variable.

Constant Array #

Sejak PHP 5.6 (const) dan PHP 7.0 (define()), nilai constant boleh berupa array. Fitur ini sangat pas untuk himpunan nilai tetap seperti daftar pilihan yang valid:

php
<?php
define("BUAH_FAVORIT", ["mangga", "jeruk", "pisang"]);
const KODE_WILAYAH = ["jakarta" => "021", "bandung" => "022"];

echo BUAH_FAVORIT[1], "\n";
echo KODE_WILAYAH["bandung"], "\n";

var_dump(in_array("mangga", BUAH_FAVORIT, true));
var_dump(count(BUAH_FAVORIT));

Output yang Dihasilkan:

text
jeruk
022
bool(true)
int(3)

Elemen constant array dibaca seperti array biasa — BUAH_FAVORIT[1] menghasilkan "jeruk" dan KODE_WILAYAH["bandung"] menghasilkan "022". Yang tetap terkunci adalah array secara keseluruhan: penugasan ulang BUAH_FAVORIT = [] ditolak, dan BUAH_FAVORIT[] = "apel" memicu galat karena penulisan elemen pada constant array tidak diizinkan. Bila Anda butuh himpunan nilai tetap yang lebih kaya perilaku — misalnya bisa memiliki method — PHP menyediakan enum yang akan kita bahas tuntas pada Section Object-Oriented Programming.

Magic Constants #

PHP mendefinisikan delapan magic constants — pengenal spesial yang nilainya bergantung pada di mana ia dipakai, bukan nilai yang Anda tentukan. Empat di antaranya paling sering dipakai untuk keperluan pelacakan:

Magic constantIsi
__LINE__Nomor baris saat ini pada berkas
__FILE__Path lengkap berkas yang sedang dieksekusi
__DIR__Direktori berkas — sama dengan dirname(__FILE__)
__FUNCTION__ / __CLASS__Nama fungsi / class tempat ia ditulis

Constant __LINE__ mudah dibuktikan karena nilainya murni angka:

php
<?php
echo "Baris ini berada di baris ", __LINE__, "\n";

function cekLokasi(): string {
    return "Fungsi didefinisikan di baris " . __LINE__;
}

echo cekLokasi(), "\n";

Output yang Dihasilkan:

text
Baris ini berada di baris 2
Fungsi didefinisikan di baris 5

Baris kedua mencetak angka 2 karena pernyataan echo menempati baris kedua berkas, sedangkan fungsi melaporkan baris 5 — baris tempat return berada. Berbeda dengan __LINE__, keluaran __FILE__ dan __DIR__ berupa path absolut yang tentu berbeda di setiap komputer, sehingga contohnya cukup digambarkan: pada komputer penulis, echo __FILE__; mencetak path lengkap berkas skrip, misalnya /home/budi/proyek/cek.php, dan __DIR__ mencetak /home/budi/proyek. Kombinasi __DIR__ . "/data.csv" adalah pola umum untuk merujuk berkas relatif terhadap lokasi skrip — kita akan memakainya di Section File System dan Streams.

Selain magic constants, PHP juga menyediakan konstanta bawaan berisi fakta runtime:

php
<?php
echo "Versi PHP: ", PHP_VERSION, " (", PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION, ")\n";
echo "Sistem operasi: ", PHP_OS, ", ukuran int: ", PHP_INT_SIZE, " byte\n";
echo "Nilai int terbesar: ", PHP_INT_MAX, "\n";

Output yang Dihasilkan:

text
Versi PHP: 8.4.23 (8.4)
Sistem operasi: Linux, ukuran int: 8 byte
Nilai int terbesar: 9223372036854775807

Keluaran di atas berasal dari PHP 8.4 pada sistem 64-bit (PHP_INT_SIZE = 8 byte), sehingga PHP_INT_MAX menunjukkan 9223372036854775807. Bila Anda menjalankan kode yang sama, nilai PHP_VERSION dan PHP_OS akan menyesuaikan instalasi Anda — konstanta ini justru berguna karena memungkinkan program beradaptasi, misalnya memeriksa PHP_VERSION_ID >= 80100 sebelum memakai fitur enum seperti yang kita praktikkan pada Chapter Memeriksa Versi PHP .

Sensitivitas Huruf dan Konvensi Penamaan #

Berbeda dengan variabel, nama constant bersifat case-sensitive sejak PHP 8 — PAJAK dan pajak dianggap dua pengenal berbeda. PHP 7 masih mengizinkan define() membuat constant case-insensitive lewat parameter ketiga, tetapi fitur itu dihapus di PHP 8; kini parameter tersebut hanya memicu peringatan bahwa fitur tidak lagi didukung. Membaca constant yang belum didefinisikan berakhir fatal:

php
<?php
define("HARGA_DEFAULT", 15000);
echo harga_default;

Saat dijalankan, PHP menghentikan program dengan Fatal error: Uncaught Error: Undefined constant "harga_default" — perhatikan bahwa pesannya menyebut nama tepat seperti yang Anda tulis. Karena constant tidak punya tanda $ yang membedakannya dari fungsi maupun keyword, komunitas PHP membentuk konvensi yang kuat: huruf kapital semua dengan garis bawah sebagai pemisah, misalnya BATAS_TRANSFER, PAJAK_PPN, atau APP_VERSION. Konvensi ini membuat constant mudah dikenali sekilas dan mengurangi risiko bentrok dengan identifier lain.

Ringkasan #

Constants menyimpan nilai tetap yang dibuat lewat const (waktu kompilasi) atau define() (runtime), dapat berupa array, dan dinamai dengan huruf kapital sebagai konvensi. Magic constants seperti __LINE__ dan konstanta bawaan seperti PHP_VERSION melengkapi perangkat ini dengan informasi runtime. Nilai yang bisa berubah-ubah kini terwakili variabel, dan nilai tetap terwakili constant — tetapi keduanya baru berguna bila kita pahami di mana nama tersebut terlihat. Chapter Variable Scope membedahnya berikutnya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

contoh.php

Unduh berkas
php
<?php

// contoh.php — rangkuman Chapter Constants.
// Jalankan dengan: php contoh.php

define("HARGA_DEFAULT", 15000);
const PAJAK = 0.11;

echo "Harga: ", HARGA_DEFAULT, "\n";
echo "Pajak: ", PAJAK, "\n";
var_dump(HARGA_DEFAULT * (1 + PAJAK));
var_dump(defined("HARGA_DEFAULT"), defined("TIDAK_ADA"));

// Konstanta array.
define("BUAH_FAVORIT", ["mangga", "jeruk", "pisang"]);
const KODE_WILAYAH = ["jakarta" => "021", "bandung" => "022"];
echo BUAH_FAVORIT[1], " - ", KODE_WILAYAH["bandung"], "\n";
var_dump(in_array("mangga", BUAH_FAVORIT, true));

// Magic constants dan konstanta bawaan.
echo "Baris ini berada di baris ", __LINE__, "\n";
echo "Versi PHP: ", PHP_VERSION, " (", PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION, ")\n";
echo "Sistem operasi: ", PHP_OS, ", ukuran int: ", PHP_INT_SIZE, " byte\n";
echo "Nilai int terbesar: ", PHP_INT_MAX, "\n";