Konstanta

Mendefinisikan konstanta dengan define dan const, serta magic constant.

Daftar isi

Konstanta menyimpan satu nilai yang ditetapkan sekali dan tidak boleh berubah selama program berjalan, sehingga cocok untuk nilai konfigurasi seperti batas maksimal, nama aplikasi, atau satuan tetap. Topik ini membahas dua cara mendefinisikan konstanta beserta perbedaannya, cara memeriksa keberadaannya, serta magic constant yang menyediakan informasi konteks dari mesin PHP.

Mendefinisikan konstanta#

Konstanta didefinisikan dengan dua cara. Fungsi define menerima nama dan nilai sebagai dua argumen terpisah, sedangkan kata kunci const menuliskan keduanya dalam satu baris seperti penugasan biasa. Nama konstanta mengikuti aturan yang sama dengan nama variabel kecuali tanda dolar, yaitu diawali huruf atau garis bawah. Konvensi umum menuliskan nama dengan huruf kapital semua yang dipisah garis bawah agar mudah dibedakan dari variabel.

Konstanta digunakan tanpa tanda dolar, dan tidak ada operator penugasan yang berlaku padanya setelah terdefinisi. Nilai yang disimpan dapat berupa nilai skalar seperti bilangan, string, dan boolean, serta array yang elemennya ditetapkan sejak awal.

php konstanta.php
<?php

define('BATAS_MAKSIMAL', 100);
const SITUS = "Pengolah Catatan";

echo BATAS_MAKSIMAL . PHP_EOL;
echo SITUS . PHP_EOL;

if (BATAS_MAKSIMAL >= 100) {
    define('MODE_KETAT', true);
}
echo MODE_KETAT . PHP_EOL;

var_dump(defined('BATAS_MAKSIMAL'));
var_dump(defined('TIDAK_ADA'));
text Keluaran
100
Pengolah Catatan
1
bool(true)
bool(false)

Berkas di atas memperlihatkan kedua cara pendefinisian berdampingan, dan keduanya digunakan dengan gaya yang sama. Baris ketiga keluaran bernilai 1 karena konstanta boolean true dicetak sebagai 1. Pemanggilan define di dalam blok if berhasil, sedangkan const tidak mampu melakukan hal yang sama, sebagaimana dijelaskan pada bagian berikutnya. Fungsi defined memeriksa keberadaan sebuah konstanta dengan menerima namanya sebagai string, sehingga hasilnya berguna sebelum konstanta yang berasal dari lingkungan luar digunakan.

Perbedaan define dan const#

Kedua cara menghasilkan konstanta yang sama ketika digunakan, tetapi keduanya bekerja pada fase yang berbeda. Deklarasi const diproses saat berkas dikompilasi, sehingga penulisannya harus berada di tingkat atas berkas atau di dalam kelas, dan nilainya harus berupa ekspresi konstanta yang bisa dihitung tanpa menjalankan kode. Fungsi define diproses saat program berjalan, sehingga boleh dipanggil di mana saja, termasuk di dalam percabangan dan fungsi, dan nilainya boleh berasal dari hasil perhitungan waktu berjalan.

Aspekdefineconst
Waktu pemrosesansaat program berjalansaat berkas dikompilasi
Lokasi penulisandi mana sajatingkat atas berkas atau kelas
Nilai yang diizinkanekspresi waktu berjalanekspresi konstanta
Nama diberikan sebagaistring, misalnya 'BATAS'tanpa string

Tabel di atas menuntun pemilihan praktisnya. Konstanta yang nilainya tetap sejak ditulis lebih tepat menggunakan const, sedangkan konstanta yang nilainya dihitung atau didefinisikan secara bersyarat hanya bisa melalui define. Banyak kode modern menggunakan const untuk konstanta kelas, dan bentuk tersebut dibahas lebih jauh pada modul PHP berorientasi objek.

Magic constant#

Selain konstanta buatan program, PHP menyediakan konstanta bawaan yang isinya ditetapkan oleh mesin. Sekelompok konstanta tersebut disebut magic constant karena nilainya berubah menurut lokasi penulisannya di dalam kode, dan tidak satu pun di antaranya dapat didefinisikan ulang. Yang paling sering digunakan antara lain __LINE__ yang menyatakan nomor baris, __FUNCTION__ yang menyatakan nama fungsi, dan __METHOD__ yang menyatakan nama metode beserta kelasnya.

php
<?php

echo PHP_VERSION . PHP_EOL;
echo __LINE__ . PHP_EOL;

function sapa()
{
    echo __FUNCTION__ . PHP_EOL;
    echo "Baris ini berada di baris " . __LINE__ . PHP_EOL;
}

sapa();
text Keluaran
8.3.27
4
sapa
Baris ini berada di baris 9

Keluaran 8.3.27 berasal dari PHP_VERSION dan mengikuti versi PHP yang terpasang di lingkungan eksekusi. Konstanta __LINE__ menghasilkan 4 pada pemanggilan pertama dan 9 pada pemanggilan kedua, persis mengikuti posisi penulisannya di berkas. Konstanta __FUNCTION__ menghasilkan nama fungsinya sendiri, yaitu sapa, sehingga berguna untuk pesan debug tanpa menulis nama fungsi secara manual.

Kesalahan umum#

  • Nama konstanta ditulis dengan huruf besar dan kecil yang tidak konsisten. Konstanta bersifat peka huruf besar dan kecil, sehingga BATAS dan batas dianggap dua nama berbeda. Perbaikannya adalah mengikuti konvensi huruf kapital semua secara konsisten.
  • Konstanta yang belum ada digunakan langsung. PHP menghentikan program dengan error Undefined constant, sedangkan variabel yang belum diberi nilai hanya memunculkan peringatan. Perbaikannya adalah memeriksa dengan defined terlebih dahulu.
  • Konstanta didefinisikan ulang dengan harapan nilainya berganti. Nilai yang pertama tetap digunakan dan peringatannya mudah terlewat. Perbaikannya adalah memilih nama baru atau memindahkan nilai yang berubah-ubah ke variabel.
php
<?php

try {
    echo TAK_TERDEFINISI;
} catch (Error $e) {
    echo $e->getMessage() . PHP_EOL;
}
text Keluaran
Undefined constant "TAK_TERDEFINISI"

Pesan error pada contoh di atas menunjukkan sifat konstanta yang tidak dimiliki variabel. Variabel yang belum diberi nilai hanya memunculkan peringatan dan program melanjutkan eksekusi, sedangkan konstanta yang tidak ada menghentikan program melalui Error yang dapat ditangkap. Perbedaan ini menegaskan bahwa penggunaan konstanta menuntut kepastian definisi lebih dahulu.

Ringkasan#

  • Konstanta didefinisikan dengan define atau const, digunakan tanpa tanda dolar, dan nilainya tidak dapat diubah setelah terdefinisi.
  • const diproses saat kompilasi dan menuntut ekspresi konstanta, sedangkan define diproses saat program berjalan dan boleh dipanggil di mana saja beserta nilai hasil perhitungan.
  • Magic constant seperti __LINE__ dan __FUNCTION__ bernilai menurut lokasi penulisannya, sedangkan PHP_VERSION dan PHP_EOL menyediakan informasi lingkungan eksekusi.
  • Pemakaian konstanta yang belum terdefinisi menghentikan program dengan error Undefined constant, dan pemeriksaannya dilakukan dengan defined.

Referensi#