← Blog'a Don
PHP Dersleri

PHP Sabitleri (Constants): Kapsamlı Rehber

5 ay once 5 ay once #102
PHP Sabitleri (Constants): Kapsamlı Rehber

PHP’de sabit (constant), tanımlandıktan sonra değeri değiştirilemeyen isimlendirilmiş bir değerdir. Konfigürasyonlar, sihirli sayılar (magic numbers) ve proje genelinde değişmeyecek metin/sayısal değerler için idealdir.


1) Sabit Nasıl Tanımlanır?

const ile

  • Derleme (parse) zamanında değerlendirilir.

  • Sadece üst seviye (global kapsam) veya sınıf içinde kullanılabilir.

<?php const SITE_ADI = "MetinDemir"; const MAX_DENEME = 5; // PHP 5.6+ const API = [ 'url' => 'https://api.example.com', 'timeout' => 30, ];

define() ile

  • Koşul blokları içinde dahi çağrılabilir.

  • PHP 7.0+ ile skaler; PHP 7.0/7.1+ sürümlerinde dizi sabitler de tanımlanabilir.

<?php define('VERSIYON', '1.2.0'); define('BAGLANTI', [ 'host' => 'localhost', 'port' => 3306, ]);

Not: define('AD', 'deger', true) ile büyük/küçük harf duyarsız sabit tanımı PHP 8.0 itibarıyla kaldırıldı. Sabit isimleri büyük harf konvansiyonuyla yazın.


2) Sabitlere Erişim, Kontrol ve Dinamik Kullanım

<?php echo SITE_ADI; // MetinDemir echo VERSIYON; // 1.2.0 // Var mı? if (defined('SITE_ADI')) { // ... } // İsmi string olan sabite dinamik erişim echo constant('VERSIYON'); // 1.2.0

Sabitler global kapsamda görünür; fonksiyon içinde de aynı isimle erişebilirsiniz.


3) Sınıf Sabitleri

Sınıf içinde const kullanılır ve :: ile çağrılır. PHP 7.1+ ile erişim belirleyici (public/protected/private) verilebilir; PHP 8.1+ ile final sınıf sabitleri desteklenir.

<?php class Depo { public const KAPASITE = 100; protected const BIRIM = 'adet'; final public const SURUM = '2.0'; } echo Depo::KAPASITE; // 100

4) Sihirli Sabitler (Magic Constants)

Derlendiği yere göre değer alan, PHP’nin sağladığı yerleşik sabitler:

SabitÖrnek Değer / Açıklama
__FILE__/var/www/index.php
__DIR__/var/www
__LINE__Bulunduğu satır numarası
__FUNCTION__Fonksiyon adı
__CLASS__Sınıf adı
__METHOD__Sınıf + metod adı
__TRAIT__Trait adı
__NAMESPACE__Namespace adı
ClassName::classTam nitelikli sınıf adı stringi

5) İsim Alanları (Namespaces) ve İçe Aktarma

<?php namespace App\Config; const LOG_DOSYASI = 'app.log'; // Başka dosyada: use const App\Config\LOG_DOSYASI; echo LOG_DOSYASI;

6) const mı, define() mı? — Karşılaştırma

Özellikconstdefine()
Kullanım yeriGlobal veya sınıf içindeÇoğu yerde, koşul içinde de
Değerlendirme zamanıDerleme zamanıÇalışma zamanı
Dizi sabitPHP 5.6+PHP 7.0/7.1+
Görünürlük (sınıfta)public/protected/private (7.1+)
Final sınıf sabiti8.1+

Öneri: Sınıflarda const, global konfigürasyonlarda ise çoğunlukla const tercih edin; koşula bağlı tanım gerekiyorsa define() kullanın.


7) Yerleşik Yararlı Sabitler

<?php echo PHP_VERSION; // Örn: 8.3.1 echo PHP_INT_MAX; // Mimariye göre maksimum integer echo DIRECTORY_SEPARATOR; // Windows: \ — Linux/macOS: / echo PHP_OS_FAMILY; // 'Windows', 'Linux', 'Darwin'...

8) En İyi Uygulamalar (Best Practices)

  • Adlandırma: BÜYÜK_HARF_VE_ALTTIRE kullanın (örn. CACHE_SURESI).

  • Tek Sorumluluk: Sadece değişmeyecek değerleri sabit yapın.

  • Merkezileştirme: Proje genel sabitlerini config/constants.php gibi tek noktada toplayın.

  • Sınıf Sabitleri: Domain’e özgü sabit değerleri ilgili sınıflara koyun (örn. Siparis::DURUM_TASLAK).

  • Sihirli Sayılardan Kaçının: Anlamı açık sabit adları tercih edin (86400 yerine BIR_GUN_SANIYE).


9) Kısa Örnek: Konfigürasyon ve Kullanım

<?php // config/constants.php const UYGULAMA_ADI = 'PHP Dersleri'; const BIR_GUN_SANIYE = 24 * 60 * 60; const DOSYA_YOLU = __DIR__ . DIRECTORY_SEPARATOR . 'dosyalar';
<?php // index.php require __DIR__ . '/config/constants.php'; echo UYGULAMA_ADI . " hoş geldiniz!\n"; sleep(BIR_GUN_SANIYE / 24); // 1 saat echo "Klasör: " . DOSYA_YOLU;

Sonuç

Sabitler, projenizin okunabilirliğini, bakımını ve güvenilirliğini artırır. Doğru yerde const/define() kullanıp sabitleri anlamlı isimlerle merkezi hâle getirirseniz, kod tabanınız çok daha sürdürülebilir olur.