Apa Itu Konstanta dan Sifat Konstanta?
Konstanta merupakan suatu tempat penyimpanan sebuah nilai layaknya sebuah variabel. Hanya saja, nilai yang telah dimuat ke dalam sebuah konstanta tidak dapat diubah lagi selama script dijalankan. Hal ini sesuai dengan namanya, “konstan” yang berarti tetap.
Kapan kita menggunakan konstanta?
Konstanta biasanya digunakan untuk menyimpan sebuah nilai yang dalam pemanfaatannya tidak perlu mengubah nilainya. Misalnya nilai dari PHI (3.14159), nilai dari sebuah API key, hingga nilai tertentu dari program kita yang tidak perlu diubah lagi. Oleh karena itu, kita memerlukan konstanta untuk mengunci sebuah nilai agar tidak dapat diubah.
Aturan Penulisan Konstanta
Layaknya sebuah variabel, konstanta juga memiliki beberapa ketentuan penulisan, antara lain:
1. Pendefinisian Konstanta dalam PHP
Tidak seperti variabel yang menggunakan tanda $
sebagai penanda, konstanta dalam PHP dapat didefinisikan menggunakan 2 cara, yaitu keyword const
dan fungsi define()
.
Jika kita mendefinisikan sebuah konstanta dengan keyword const
, caranya mirip seperti menginisialisasi sebuah variabel. Hanya saja kita perlu mengganti tanda $
dengan keyword const
sebelum nama variabel. Contoh penulisannya:
<?php
const PHI = 3.14159;echo PHI;?>
Jika kita mendefinisikan sebuah konstanta dengan fungsi define()
, kita perlu menyediakan dua nilai sebagai parameter wajib, yaitu nama konstanta dan nilainya.
Sintaks fungsi
define()
<?php
define($name, $value, $case_insensitive = false);?>
$name
merupakan parameter yang memuat nama sebuah konstanta. Parameter ini memuat nilai dengan tipe data string.$value
merupakan parameter yang memuat nilai sebuah konstanta. Parameter ini memuat nilai dengan beragam jenis tipe data scalar, seperti integer, float, boolean, string, dan NULL. Sejak PHP 7,$value
juga dapat memuat nilai bertipe data array.$case_insensitive
merupakan parameter opsional, yang memuat nilai bertipe data boolean untuk menentukan apakah konstanta yang didefinisikan bersifat case insensitive atau tidak. Secara default, nilai parameter ini adalahfalse
. Pemanfaatan parameter ini sudah deprecated sejak PHP 7.3.0 dan akan dihapus pada PHP 8.0.0. Untuk itu, penggunaan parameter ini tidak disarankan.
Mari kita perhatikan contoh penerapan fungsi define()
.
<?php
define('PHI', 3.14159);echo PHI;?>
Kedua contoh di atas akan menghasilkan output berupa:
3.14159
2. Bersifat Case Sensitive
Konstanta dalam PHP bersifat case sensitive. Hal ini berarti definisi konstanta PHI
berbeda dengan konstanta Phi
. Namun, penulisan nama konstanta seharusnya menggunakan UPPERCASE sebagai pembeda konstanta dengan variabel lain. Hal ini merupakan kesepakatan lazim pemrogram PHP secara umum. Berikut contoh penulisan yang baik dan benar untuk konstanta.
<?php
// Penulisan nama konstanta yang tidak disarankanconst Phi = 3.14;// Penulisan nama konstanta yang disarankanconst PHI = 3.14159;define('API_KEY', '23oQ94nasY129');?>
3. Nilai Konstan Tidak Dapat Diubah
Sesuai pernyataan sebelumnya, nilai suatu konstanta tidak dapat diubah lagi setelah diinisialisasi pertama kali selama script dijalankan. Jika kita mencoba mengubah nilai konstanta, kita akan mendapatkan pesan peringatan. Perhatikan contoh berikut.
<?php
const PHI = 3.14159;// Pengubahan nilai PHI dari 3.14159 menjadi 3.14define('PHI', 3.14);echo PHI;?>
Notice: Constant PHI already defined
3.14159
Perlu kita perhatikan bahwa kita tidak seharusnya mendefinisikan konstanta dengan nama yang sama dalam satu script, baik dengan keyword
const
maupun dengan fungsidefine()
.
Perbedaan const dan define
Keyword const
dan fungsi define()
sama-sama berfungsi untuk membentuk sebuah konstanta. Namun dalam pemanfaatannya, kedua cara tersebut memiliki beberapa perbedaan. Mari kita perhatikan perbedaannya pada tabel berikut.
const |
define() |
---|---|
Membentuk konstanta saat compile time (ketika program dibentuk untuk siap dijalankan) | Membentuk konstanta saat run time (ketika program dijalankan) |
Selalu bersifat case sensitive | Dapat bersifat case sensitive, dapat juga bersifat case insensitive (tidak disarankan) |
Dapat diterapkan dalam class dan interface | Tidak dapat diterapkan dalam class atau interface |
Tidak dapat digunakan untuk mendefinisikan konstanta dalam blok kondisional | Dapat digunakan untuk mendefinisikan konstanta dalam blok kondisional |
Dapat bernilai ekspresi sejak PHP 5.6, sebelumnya hanya dapat memuat nilai static scalar seperti integer, float, string, boolean, NULL. | Dapat bernilai ekspresi (seperti operasi matematika) |
Jika kita lihat pada perbedaan-perbedaan pada tabel, terdapat cakupan mengenai blok kondisional, class, hingga interface. Mari kita lakukan percobaan untuk lebih paham perbedaannya.
Mendefinisikan Konstanta dalam Blok Kondisional
Pertama-tama, kita akan melakukan percobaan mengenai penerapan dalam blok kondisional. Mari kita perhatikan kode berikut.
<?php
if (3 < 5) {const PHI = 3.14159;}echo "PHI = " . PHI;?>
Jika kita mencoba untuk menerapkan keyword const
dalam blok kondisional, kita akan mendapatkan error seperti ini.
Parse error: syntax error, unexpected 'const' (T_CONST)
Sebaliknya, jika kita mencoba mendefinisikan konstanta dalam blok kondisional dengan fungsi define()
, kita tidak akan mendapatkan error. Perhatikan contoh berikut.
<?php
if (3 < 5) {define('PHI', 3.14159);}echo "PHI = " . PHI;?>
PHI = 3.14159
Mendefinisikan Konstanta Dalam Class atau Interface
Selanjutnya, kita akan melakukan percobaan mengenai penerapan dalam class atau interface. Mari kita perhatikan kode berikut.
<?php
class Science {const PHI = 3.14159;define('C', 3E8);}?>
Jika kita mencoba untuk menerapkan fungsi define()
dalam class, kita akan mendapatkan error seperti ini.
Parse error: syntax error, unexpected 'define' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST)
Namun, kita tidak akan mendapatkan error mengenai penggunaan const
dalam class.
Mendefinisikan Konstanta Dengan Nilai Berupa Ekspresi
Selanjutnya, kita akan melakukan percobaan mendefinisikan konstanta dengan nilai dalam bentuk ekspresi. Mari kita perhatikan kode berikut.
<?php
define('FIRST_AREA', 10 * 10);const SECOND_AREA = 12 + 12;echo FIRST_AREA . " & " . SECOND_AREA;define('TIME', time());const THIRD_AREA = 2 * 8 > 6 ? FIRST_AREA / 5 : 0;echo TIME . " --- " . THIRD_AREA;?>
100 & 24
1597209479 --- 20
Kita tidak lagi mendapatkan error saat memuat nilai berupa ekspresi ke dalam konstanta. Hal ini dikarenakan sejak versi 5.6, definisi konstanta dengan keyword const
sudah dapat memuat nilai berupa ekspresi.
Fungsi
time()
merupakan fungsi bawaan PHP (built-in function PHP) yang mengembalikan nilai berupa waktu dalam satuan detik sejak Unix Epoch (1 January 1970 00:00:00 GMT).
Pengecekan Nilai Konstanta
Pengecekan nilai konstanta dapat dilakukan dengan menggunakan fungsi bawaan PHP, yaitu defined()
. Fungsi defined()
mengambil nama konstanta sebagai parameter untuk diperiksa dan mengembalikan nilai boolean berupa true
atau false
. Nilai boolean menunjukkan apakah konstanta itu telah terdefinisi atau tidak. Nama konstanta yang diterima sebagai parameter dituliskan dalam bentuk string. Contoh penerapannya adalah sebagai berikut.
<?php
const PHI = 3.14159;define('API_KEY', '23oQ94nasY129');if (defined('PHI')) {echo "PHI terdefinisi dengan nilai " . PHI;} else {echo "Tidak ada definisi terhadap konstanta PHI.";}echo defined('API_KEY') ? ("API_KEY -> " . API_KEY) : ("Tidak ada definisi terhadap konstanta API_KEY.");?>
PHI terdefinisi dengan nilai 3.14159
API_KEY -> 23oQ94nasY129
Sebagai tambahan, kita juga dapat menerapkan operator &&
dan operator ||
untuk menggantikan percabangan/conditional yang sederhana. Agar lebih mengerti, mari kita perhatikan contoh berikut.
<?php
if (!defined('PHI')) {define('PHI', 3.14159);}echo PHI;?>
Pada contoh di atas, kita masih menerapkan percabangan/conditional. Apabila konstanta PHI
belum terdefinisi, kita akan mendefinisikan konstanta PHI
dengan nilai 3.14159
.
Selanjutnya, untuk menyingkat penulisan kode di atas, kita dapat memanfaatkan operator &&
sebagai pengganti conditional. Perhatikan contoh berikut.
<?php
!defined('PHI') && define('PHI', 3.14159);echo PHI;?>
Arti dari kode di atas adalah jika !defined('PHI')
bernilai true (dengan kata lain konstanta PHI
belum terdefinisi), akan dijalankan statement setelah operator &&
, yaitu define('PHI', 3.14159)
. Sebaliknya, ketika !defined('PHI')
bernilai false, statement setelah operator &&
tidak akan dijalankan.
Selain itu, kita akan membahas pemanfaatan operator ||
. Perhatikan contoh berikut.
<?php
defined('PHI') || define('PHI', 3.14159);echo PHI;?>
Arti dari kode di atas adalah jika defined('PHI')
bernilai true (konstanta PHI
telah terdefinisi), tidak akan dijalankan statement setelah operator ||
, yaitu define('PHI', 3.14159)
. Sebaliknya, ketika defined('PHI')
bernilai false, statement setelah operator ||
akan dijalankan.
Cara kerja operator
||
berkebalikan dengan operator&&
.
Sebenarnya, ketiga kode di atas menjalankan hal yang sama, yaitu mendefinisikan konstanta PHI
jika belum terdefinisi. Hasil keluaran ketiga kode di atas adalah sebagai berikut.
3.14159