PHP Dersleri #6: Sabit Değerlerin Tanımlanması
Uzmoon · · 7 dk
Bu Dersin Amacı
Bu dersin amacı, PHP programlama dilinde kod akışı boyunca değeri değiştirilemeyen sabitlerin (constants) çalışma prensiplerini kavramak, define() fonksiyonu ile const anahtar kelimesi arasındaki kullanım farklarını öğrenmek ve sabitleri projelerinizde hatasız şekilde tanımlayabilmektir.
Sabit (Constant) Nedir?
PHP programlamada verileri saklamak için değişkenleri kullanırız; ancak değişkenlerin taşıdığı değerler çalışma anında yeniden atanabilir ve değiştirilebilir. Bazı durumlarda ise bir verinin program çalışmaya başladığı andan sonlanana kadar asla değişmemesini, kazara üzerine yeni bir değer yazılmamasını isteriz. İşte bu gibi senaryolarda sabitler (constants) devreye girer.
Sabitler, adından da anlaşılacağı üzere tanımlandıktan sonra içeriği hiçbir şekilde değiştirilemeyen ve bellekten silinemeyen özel veri tutuculardır. Bir veritabanı bağlantı adresi, uygulamanın versiyon numarası, sistemin çalıştığı dizin yolu veya matematiksel bir katsayı gibi tüm uygulama genelinde tutarlı kalması gereken bilgileri saklamak için sabitler tercih edilir.
Sabitlerin Temel Kuralları ve Değişkenlerden Farkları
PHP dilinde sabitler, önceki derslerimizde gördüğümüz standart değişkenlerden belirgin kurallarla ayrılır. Sabitleri kullanırken göz önünde bulundurmanız gereken temel özellikler şunlardır:
- Dolar işareti kullanılmaz: Standart PHP değişkenleri mutlaka
$işareti ile başlarken, sabitlerin başında hiçbir zaman$işareti yer almaz. - Değerleri sonradan değiştirilemez: Bir sabit bir kez tanımlandıktan sonra ona yeni bir değer atanamaz, tanımsız hale getirilemez veya içeriği değiştirilemez.
- Genel kapsam (Global Scope): Sabitler tanımlandıkları andan itibaren betiğin her yerinden, hatta fonksiyonların ve sınıfların içerisinden herhangi bir özel anahtar kelimeye ihtiyaç duyulmadan doğrudan çağrılabilir.
- Veri tipleri: Sabitler temel skaler veri tiplerini (string, integer, float, boolean) ve modern PHP sürümlerinde desteklendiği üzere dizi (array) türündeki verileri depolayabilir.
- Büyük harf geleneği: PHP sözdizimi açısından zorunlu olmasa da sabit isimlerinin tüm harflerinin büyük yazılması ve kelimelerin alt çizgi (
_) ile ayrılması evrensel bir kodlama standardıdır.
define() Fonksiyonu ile Sabit Tanımlama
PHP dilinde sabit oluşturmanın en klasik ve yaygın yollarından biri yerleşik define() fonksiyonunu kullanmaktır. Bu fonksiyon en temel haliyle iki parametre alır: ilk parametre sabitin adı, ikinci parametre ise sabitin alacağı değerdir.
Fonksiyon sözdizimi şu şekildedir:
define("SABIT_ADI", deger);
Modern PHP sürümlerinde (özellikle PHP 8 ve sonrası) sabit isimleri her zaman büyük ve küçük harfe duyarlıdır (case-sensitive). Eski PHP sürümlerinde bulunan üçüncü duyarsızlık parametresi güncel PHP sürümlerinde tamamen kaldırılmıştır. Bu nedenle tanımladığınız sabiti çağırırken harf büyüklüğüne birebir uymanız gerekir.
Aşağıdaki örnekte define() fonksiyonu ile farklı veri türlerinde sabitler tanımlanmış ve ekrana yazdırılmıştır:
<?php
// define() fonksiyonu ile farkli veri tiplerinde sabit tanimlama
define("UYGULAMA_ADI", "Web Odasi");
define("SURUM_NUMARASI", 3);
define("PI_SAYISI", 3.14159);
define("BAKIM_MODU", false);
echo UYGULAMA_ADI;
echo "\n";
echo SURUM_NUMARASI;
echo "\n";
echo PI_SAYISI;
echo "\n";
var_dump(BAKIM_MODU);
Yukarıdaki kodun çıktısı şu şekildedir:
Web Odasi
3
3.14159
bool(false)
const Anahtar Kelimesi ile Sabit Tanımlama
PHP 5.3 sürümüyle birlikte dil sözdizimine giren ve modern PHP mimarisinde sıklıkla tercih edilen ikinci yöntem const anahtar kelimesidir. const ifadesi, bir fonksiyon çağırmak yerine doğrudan dil yapısı seviyesinde sabit tanımlamanıza olanak tanır.
Bu yöntemin temel sözdizimi oldukça yalındır:
const SABIT_ADI = deger;
const ile define() arasındaki en belirgin teknik fark, derleme ve çalışma zamanı davranışıdır. const anahtar kelimesi derleme zamanında (compile-time) çözümlenir; bu sebeple kod bloklarının en üst düzeyinde veya sınıfların içerisinde kullanılır. define() ise çalışma zamanında (run-time) yürütülen bir fonksiyondur.
Modern PHP projelerinde dizileri (array) sabit olarak saklamak oldukça yaygındır. const kullanarak hem skaler değerleri hem de liste halindeki yapılandırma dizilerini pratik biçimde sabitleyebilirsiniz.
Aşağıdaki örnekte const yapısı ile metin, sayı ve dizi içeren sabitlerin tanımlanması gösterilmiştir:
<?php
// const anahtar kelimesi ile yapilandirma sabitleri olusturma
const SUNUCU_ADI = "localhost";
const PORT_NUMARASI = 8080;
const DESTEKLENEN_DILLER = [
"tr",
"en",
"de"
];
echo SUNUCU_ADI;
echo "\n";
echo PORT_NUMARASI;
echo "\n";
print_r(DESTEKLENEN_DILLER);
Yukarıdaki kodun çıktısı şu şekildedir:
localhost
8080
Array
(
[0] => tr
[1] => en
[2] => de
)
Sabit Varlığını Denetleme ve Dinamik Çağırma
Büyük ölçekli projelerde veya modüler sistemlerde bir sabitin daha önce tanımlanıp tanımlanmadığını kontrol etmek isteyebilirsiniz. PHP, bu gereksinim için defined() fonksiyonunu sunar. Bu fonksiyon, parametre olarak verilen sabit adının mevcut olup olmadığını inceler ve geriye mantıksal bir değer (true veya false) döndürür.
Bunun yanı sıra, sabitin adını doğrudan kod içerisine yazmak yerine bir değişkenin değerinden dinamik olarak almak istediğiniz durumlar olabilir. Sabit adları $ işareti barındırmadığı için değişken adı birleştirme yöntemiyle doğrudan çağrılamaz. Bu gibi durumlarda PHP'nin constant() fonksiyonu kullanılır.
Aşağıdaki örnekte bu iki yardımcı fonksiyonun işleyişi detaylandırılmıştır:
<?php
// Onceden bir sabit tanimliyoruz
define("VERITABANI_ADI", "webodasi_db");
// defined() ile sabitin var olup olmadigini denetliyoruz
$mevcutMu = defined("VERITABANI_ADI");
var_dump($mevcutMu);
// constant() ile dinamik isim uzerinden sabite ulasiyoruz
$arananAyar = "VERITABANI_ADI";
$deger = constant($arananAyar);
echo $deger;
Yukarıdaki kodun çıktısı şu şekildedir:
bool(true)
webodasi_db
Sabit İsimlendirme Standartları
PHP dilinde sabit isimleri oluşturulurken değişken kurallarına benzer genel sözdizimi kuralları geçerlidir. Geçerli bir sabit ismi bir harf veya alt çizgi (_) karakteri ile başlamalıdır. İlk karakterden sonra istenildiği kadar harf, rakam ve alt çizgi kullanılabilir; ancak sabit isimleri asla bir rakamla başlayamaz.
Topluluk standartları ve temiz kod (Clean Code) prensiplerine göre, sabitlerin kod içinde bir bakışta ayırt edilebilmesi için şu kurallar benimsenmiştir:
- Sabit adlarındaki tüm harfler büyük (UPPERCASE) yazılmalıdır (örneğin:
SITE_BASLIGI). - Birden fazla kelimeden oluşan sabit isimlerinde kelimeler mutlaka alt çizgi (
_) ile ayrılmalıdır (örneğin:MAX_GIRIS_DENEMESI). - Sabit isimlerinde Türkçe karakterler teknik olarak bazı durumlarda desteklense bile kod taşınabilirliği açısından kesinlikle kullanılmamalı, standart Latin alfabesi tercih edilmelidir.
Sık Yapılan Hatalar
Yeni başlayanların sabit tanımlarken ve kullanırken en sık karşılaştığı hatalar şunlardır:
- Sabit çağırırken başına dolar ($) işareti koymak: Sabitler değişken değildir.
$SABIT_ADIşeklinde bir kullanım yapıldığında PHP bu isimde bir değişken arar ve tanımsız değişken uyarısı verir. - Tanımlanmış bir sabite yeniden değer atamaya çalışmak: Sabitlerin değeri sonradan değiştirilemez. Örneğin
SITE_ADI = "Yeni Ad";şeklinde bir atama yapmaya çalışmak sözdizimi hatasına yol açar. - Çift tırnaklı metin içinde sabiti doğrudan yazdırmak: PHP, çift tırnak içerisindeki değişkenleri otomatik ayrıştırır; ancak sabitleri tanımaz.
echo "Sitemiz: SITE_ADI";yazdığınızda ekrana sabitin değeri değil, doğrudan metin basılır. Sabit değerini metinle birleştirmek için nokta (.) birleştirme operatörü kullanılmalıdır. - Eski sürümlerdeki büyük/küçük harf duyarsızlığı parametresini kullanmak: PHP 8.0 öncesinde
define("SABIT", "deger", true)şeklinde üçüncü bir parametre verilebiliyordu. Modern PHP sürümlerinde bu parametre tamamen kaldırılmıştır; üçüncü parametre verilmesi hataya neden olur. - const ifadesini fonksiyon veya döngü blokları içinde kullanmaya çalışmak:
constyapısı derleme anında işlendiği için fonksiyon veya kontrol yapılarının gövdesinde doğrudan tanımlanamaz. Çalışma anında dinamik bir sabit oluşturulacaksadefine()fonksiyonu kullanılmalıdır.
Alıştırma
Bir web sitesinin yapılandırma ayarlarını yönettiğinizi varsayın. Aşağıdaki yönergelere uygun olarak gerekli sabitleri tanımlayınız ve ekrana yazdırınız:
constyapısını kullanarak değeri"Web Odasi Blog"olan birSITE_BASLIKsabiti tanımlayın.constyapısını kullanarak değeri2026olan birYAYIN_YILIsabiti tanımlayın.define()fonksiyonunu kullanarak değeri"admin@webodasi.com"olan birYONETICI_EPOSTAsabiti tanımlayın.define()fonksiyonunu kullanarak içinde"PHP","MySQL"ve"HTML"elemanları bulunanKATEGORILERisimli bir dizi sabiti tanımlayın.- Tanımladığınız tüm sabitlerin değerlerini alt alta ekrana yazdırarak çıktıyı gözlemleyin.
Çözüm
Yukarıdaki gereksinimleri karşılayan eksiksiz ve çalıştırılabilir PHP kodu şu şekildedir:
<?php
// const ile tekil degerlerin tanimlanmasi
const SITE_BASLIK = "Web Odasi Blog";
const YAYIN_YILI = 2026;
// define() ile metin ve dizi sabitlerinin tanimlanmasi
define("YONETICI_EPOSTA", "admin@webodasi.com");
define("KATEGORILER", [
"PHP",
"MySQL",
"HTML"
]);
// Sabit degerlerinin ekrana yazdirilmasi
echo SITE_BASLIK;
echo "\n";
echo YAYIN_YILI;
echo "\n";
echo YONETICI_EPOSTA;
echo "\n";
print_r(KATEGORILER);
Yukarıdaki çözüm kodunun çıktısı şu şekildedir:
Web Odasi Blog
2026
admin@webodasi.com
Array
(
[0] => PHP
[1] => MySQL
[2] => HTML
)
Özet
Bu derste PHP programlama dilinde sabitlerin ne olduğunu ve nasıl tanımlandığını öğrendik:
- Sabitler, betik çalıştığı müddetçe değeri değiştirilemeyen ve silinemeyen güvenli veri depolarıdır.
- Sabit oluşturmak için çalışma anında işlenen
define()fonksiyonu veya derleme anında çözümlenenconstanahtar kelimesi kullanılır. - Sabitlerin başında değişkenlerde olduğu gibi dolar (
$) işareti bulunmaz ve sabitler global etki alanına sahiptir. - Modern PHP standartlarında sabit isimleri büyük harflerle ve kelime araları alt çizgi ile yazılarak isimlendirilir.