Söz dizimi
Bir sabit define() işlevi veya
const
anahtar sözcüğü kullanılarak tanımlanabilir.
define() bir sabitin rastgele bir ifadede tanımlanmasına
izin verir. const
anahtar sözcüğünün ise aşağıdaki
paragrafta açıklanan bazı kısıtlamaları vardır. Bir sabit tanımlandıktan
sonra asla değiştirilemez ve tanımsız yapılamaz.
const
anahtar sözcüğü kullanılırken, yalnızca sayıl
(bool, int, float ve
string) ifadeler ve yalnızca sayıl ifadeler içeren sabit
dizileri kabul edilir. Sabitleri resource olarak tanımlamak
mümkünse de, umulmadık sonuçlara yol açabileceğinden bundan kaçınılmalıdır.
Bir sabitin değerine basitçe ismi belirtilerek erişilebilir.
Değişkenlerin aksine, sabitlerin önüne $
imi
eklemeMEniz gerekir. Bir sabitin
ismi dinamik olarak belirtiliyorsa, sabitin değerini okumak
için constant() işlevini kullanmak mümkündür.
Tanımlanmış sabitlerin tamamının bir listesini almak için,
get_defined_constants() işlevini kullanabilirsiniz.
Bilginize:
Sabitlerin ve (genel) değişkenlerin isim alanları farklıdır. Bu,
örneğin true
ile $TRUE değerlerinin farklı
olabilecekleri anlamına gelir.
Tanımlanmamış bir sabit kullanırsanız, bir Error
yavrulanır. PHP 8.0.0 öncesinde, tanımsız sabitler çıplak bir kelime
dizesi olarak yorumlanır (SABIT yerine "SABIT" gibi). PHP 7.2.0 ve
sonrasında bu kullanım önerilmemekte olup böyle bir durumda bir
E_WARNING
çıktılanır. PHP 7.2.0 öncesinde ise E_NOTICE seviyesinde bir hata çıktılanırdı.
Ayrıca $foo[bar]'ın
(bar bir sabit olmadıkça) neden yanlış olduğuna dair açıklamaya da bakın.
Bu durum, tanımlanmadıkları takdirde daima bir Error
yavrulayan (tamamen) nitelenmiş
sabitlere uygulanmaz.
Bilginize:
Bir sabitin atanıp atanmadığına bakmak için defined()
işlevini kullanın.
Sabitler ve değişkenler arasındaki farklar:
-
Bir sabit ismi
$
imi ile başlamaz.
-
Sabitler, değişken etki alanı kurallarına bağlı olmaksızın her yerde
tanımlanabilir ve her yerden erişilebilir.
-
Sabitler tanımlandıktan sonra yeniden tanımlanamaz ya da tanımsız
duruma getirilemez.
-
Bir sabit sadece sayıl değerlere veya dizilere çözümlenebilir.
Örnek 1 - Sabitlerin Tanımlanması
<?php
define("CONSTANT", "Merhaba dünya.");
echo CONSTANT; // "Merhaba dünya" çıktılar.
echo Constant; // Hata verir: Tanımlanmamış sabit "Constant"
// PHP 8.0.0 öncesinde. "Constant" çıktılanıp bir uyarı verilirdi.
?>
Örnek 2 - Sabitlerin const
ile tanımlanması
<?php
// Basit sayıl değer
const SABIT = 'Merhaba Dünya';
echo SABIT;
// Sayıl ifade
const DIGER_SABIT = SABIT.'; Elveda Dünya';
echo DIGER_SABIT;
const HAYVANLAR = array('köpek', 'kedi', 'kuş');
echo HAYVANLAR[1]; // "kedi" çıktılanır
// Sabit dizisi
define('HAYVANLAR', array(
'köpek',
'kedi',
'kuş'
));
echo HAYVANLAR[1]; // "kedi" çıktılanır
?>
Bilginize:
Sabitlerin define() kullanılarak tanımlanmasının tersine,
const
anahtar sözcüğü ile tanımlanan sabitler derleme
sırasında tanımlandıklarından en üst seviye etki alanında bildirilmiş
olmalıdır. Yani bunlar işlevlerin, döngülerin, if
deyimlerinin veya try
/catch
bloklarının içinde bildirilemez.