Memahami Konstanta Pada PHP – Update PHP 7

Setelah sebelumnya kita membahas mengenai variabel dalam php pada kesempatan kali ini kita akan membahas mengenai konstanta pada PHP.

PHP menyediakan 2 jenis tempat penyimpanan nilai yaitu  variabel (variable) dan konstanta (constant), sehingga konstanta ini sendiri fungsinya sama seperti variabel yaitu menyimpan nilai, namun bedanya nilai yang disimpan konstanta tidak dapat diubah.

Karena sifat nilainya yang tetap, konstanta sering digunakan untuk data  konfigurasi, seperti nama server, nama database, dll.

I. Cara Penulisan Konstanta Pada PHP

Pada PHP, konstanta dapat ditulis dengan dua cara, yaitu menggunakan keyword define atau const:

  1. Contoh cara penulisan konstanta dengan  define
    <?php
    define('URL_SITUS', 'www.jagowebdev.com');
    echo URL_SITUS; //www.jagowebdev.com

    Catatan:  penulisan define  dapat digunakan dimana saja kecuali di dalam class, contoh:

    <?php
    class siteProp()
    {
    	define('URL_SITUS', 'www.jagowebdev.com'); // Error
    	public function getProp()
    	{
    		// code
    	}
    }
    ?>
  2. Contoh penulisan konstanta dengan const
    <?php
    const URL_SITUS = 'www.jagowebdev.com';
    echo URL_SITUS; //www.jagowebdev.com

    Catatan:  penulisan const  dapat digunakan dimana saja, namun pada PHP versi < 5.3, hanya dapat digunakan di dalam kelas (class) contoh:

    <?php
    const URL_SITUS = 'www.jagowebdev.com'; // Valid pada PHP > 5.3
    class siteProp()
    {
    	const URL_SITUS = 'www.jagowebdev.com'; // Valid
    }
    ?>

Terdapat beberapa ketentuan dalam penulisan konstanta pada PHP, yaitu:

  1. Nama konstanta harus diawali dengan huruf atau underscore dan nama konstanta  hanya boleh berisi huruf, angka dan underscore;
  2. Nama konstanta  bersifat  case sensitive  untuk penggunaan keyword const, yang berarti membedakan antara huruf besar dan huruf kecil, sedangkan jika menggunakan define, secara default bersifat case sensitive,  namun optional dapat di buat case insensitive;
  3. Konstanta hanya dapat diisi nilai scalar, seperti boolean, int, float, atau string dan array tidak dapat diisi selain itu, seperti object (class).
    Mulai PHP 7, Konstanta dapat diisi array, contoh penggunaannya ada dibagian: Contoh Penggunaan Konstanta Pada PHP.
  4. Nama konstanta bisa sama dengan keyword PHP seperti echo, namun ketika memanggilnya harus menggunakan fungsi  constant, misal:
    <?php
    define('echo', 'Saya Konstanta');
    echo constant('echo'); // Saya Konstanta
    ?>

lebih jauh mengenai perbedaan penggunaan define dan const akan disampaikan pada bagian akhir tulisan  ini.

Penulisan Konstanta Pada PHP

II. Tips Terkait Penggunaan Konstanta Pada PHP

Beberapa tips yang dapat digunakan untuk penulisan konstanta

  1. Gunakan nama konstanta yang mencerminkan nilainya;
  2. Gunakan huruf kapital semua, pisahkan antar kata dengan underscore, misal CONFIG_DB;
  3. Hindari penggunaan nama yang diawali dengan dua underscore dan diakhiri dua underscore, seperti: __NAMA__, karena selain akan membuat rancu, juga akan berpotensi bentrok dengan konstanta bawaan PHP. Jika bentrok, maka tidak akan muncul pesan error tetapi nilai konstanta yang dihasilkan adalah nilai konstanta bawaan PHP;
  4. Untuk menghindari konflik dengan konstanta lain dapat dilakukan dengan menguji apakan konstanta tersebut telah ada, jika belum, maka kita definisikan konstanta tersebut. contoh:
    <?php
    $list = array('SITE_NAME' => 'JagoWebDev', 'SITE_URL' => 'www.jagowebdev.com');
    foreach($list as $const_name => $const_val)
    {
    	if (!defined($const_name))
    	{
    		define($const_name, $const_val);
    	}
    }
    
    echo SITE_URL; // www.jagowebdev.com
    ?>

III. Scope

Konstanta bersifat global, sehingga konstanta yang telah di deklarasikan dapat  digunakan dimanapun baik di dalam fungsi maupun diluar fungsi.

IV. Perbedaan Penggunaan define dan const

Sejak versi 5.3, PHP mengijinkan  penulisan konstanta  dengan keyword const digunakan di luar class. define dieksekusi  saat program run time, sedangkan const pada saat compile kode program, sehingga memunculkan beberapa perbedaan, berikut beberapa perbedaan tersebut:

  1. define dapat di deklarasikan pada conditional statement, sedangkan const tidak, contoh:
    <?php
    if (!defined('NAMA_SITUS'))
    	define('NAMA_SITUS', 'Agus PH'); // Valid
    
    if (defined('URL_SITUS'))
    	const URL_SITUS = 'www.agusph.com'; // Error
    ?>
  2. define dapat bernilai  expresi seperti operasi aritmatika atau penggabungan string (concantenate), sedangkan const tidak, namun mulai PHP 5.6 const juga dapat bernilai  exspresi. Contoh:
    <?php
    define('MAX_EXEC', 60 * 3); // Valid
    define('MAX_TIME', MAX_EXEC + 360); // Valid
    define('NAMA_LENGKAP', NAMA_DEPAN . NAMA_BELAKANG) // Valid
    const MAX_EXEC = 60 * 3; // Valid mulai PHP 5.6
    ?>
  3. define dapat di buat menjadi  case insensitive, sedangkan const tidak. contoh:
    <?php
    define('MAX_EXEC', 180, true); 
    echo MAX_EXEC; // 180
    echo max_exec; // 180
    const MAX_TIME = 180;
    echo MAX_TIME; // 180
    echo max_time; // Error
    ?>
  4. const hanya menerima plain text  untuk nama, sedangkan define tidak (bisa variabel), contoh seperti syntax sebelumnya:
    <?php
    $list = array('SITE_NAME' => 'Agus PH', 'SITE_URL' => 'www.agusph.com');
    foreach($list as $const_name => $const_val)
    {
    	if (!defined($const_name))
    	{
    		define('CFG_' . $const_name, $const_val);
    	}
    }
    ?>
  5. Karena dijalankan pada saat compile, const sedikit lebih cepat daripada define, perbedaan terasa jika penggunaan konstanta dalan jumlah besar.
  6. Penggunaakn const dirasa lebih bagus dari segi estetika penulisan, karena mengikuti pola deklarasi yang umum digunakan (menggunakan tanda =), disamping juga konsisten dalam penulisan baik didalam class maupun diluar class dan dalam penggunaan namespace.
  7. Semoga kedepan const akan memiliki fitur sama dengan define.

V. Konstanta Pada PHP (built-in)

PHP sendiri menyediakan beberapa konstanta yang bisa langsung kita gunakan, konstanta ini dibuat oleh berbagai ekstensi, sehingga hanya tersedia ketika ekstensi tersebut tersedia baik pada saat loading atau saat kompilasi. beberapa diantaranya:

Nama  Konstanta Keterangan
__LINE__ Untuk mendapatkan baris keberapa dari kode, dihitung dari paling atas. contoh:

<?php

echo __LINE__; // 3
?>
__FILE__ Untuk mendapatkan full path dari file beserta nama filenya. contoh:

<?php
echo __FILE__; // E:xampp-1.8.3.2htdocstuts.php
?>
__DIR__ Untuk mendapatkan full path direktori dari file. Contoh:

<?php
echo __DIR__; // E:xampp-1.8.3.2htdocs
?>
__FUNCTION__ Mendapatkan nama dari fungsi. Contoh:

<?php
function testFunction()
{
	echo __FUNCTION__;
}
testFunction(); // testFunction
?>
__CLASS__ Mendapatkan nama dari class termasuk namespace (PHP 5.3). contoh:

<?php
namespace AppLibraries;

class testClass 
{
	public function testMagicConstant()
	{
		echo __CLASS__;
	}
	
}
$class = new testClass;
$class->testMagicConstant(); // AppLibrariestestClass
?>

VI. Contoh Penggunaan Konstanta Pada PHP

Mulai PHP versi 7, kita dapat mendefinisikan konstanta dengan array. Penggunaan array akan mempermudah kita dalam mengelompokkan jenis konstanta. Contoh kali ini kita akan menggunakan konstanta sebagai konfigurasi server:

file config.php

define ('SITE_NAME', 'jagowebdev');
define ('DB_CONFIG', ['host' => 'localhost',
					  'port' => '3306',
					  'db_name' => 'jagowebdev',
					  'user' => 'root',
				      'pass' => ''
					 ]
		);

file connect.php

<?php
include 'config.php';
try 
{
	$service = new PDO( 'mysql:host='.DB_CONFIG['host'].';port='.DB_CONFIG['port'] . ';dbname=' . DB_CONFIG['db_name'], 
						DB_CONFIG['user'], 
						DB_CONFIG['pass'], 
						array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1) 
					);
	$service->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
	$errMessage = 'Gagal terhubung ke Database';
	echo $errMessage . ':' . $e->getCode() . ':' . $e->getMessage();
}
?>

Demikian pembahasan mengenai konstanta pada PHP, semoga bermanfaat dan selamat mencoba.

Subscibe Now

Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com

Komitmen Kami: Kami senantiasa menghargai privasi Anda dan tidak akan membagikan identitas Anda ke pihak manapun.

Silakan tinggalkan komentar

Newsletter

Jadilah yang pertama tahu berita terbaru dari Jagowebdev.com