Menu

PHP Sabitler: define() ile const ve Sihirli Sabitler

Bir PHP sabiti, değişemeyen bir değere verilen addır: const MAX_USERS = 100; ya da define('MAX_USERS', 100);. define ile const farkı, sabit diziler, self:: ile sınıf sabitleri, defined() ile kontrol ve __LINE__, __FILE__, __DIR__, __CLASS__ sihirli sabitleri.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Sabit, betik çalışırken hiç değişmeyen bir değere verilen addır. const MAX_USERS = 100; veya define('MAX_USERS', 100); ile tanımlayın, sonra $ olmadan yalın adını kullanın.

Gelenek olarak sabit adları UPPER_SNAKE_CASE ile yazılır. Sabitler globaldir: bir dosyanın başında tanımlanan bir sabit, global olmadan her fonksiyonun içinde görünür.

define() ile const

İkisi de bir sabit oluşturur, ama farklı zamanlarda çalışırlar. const, PHP dosyayı derlerken çözümlenir; define() ise diğer fonksiyon çağrıları gibi çalışır.

constdefine()
if, döngü ve fonksiyonların içindeHayırEvet
Bir değişkenden oluşturulan adHayırEvet
Sınıf sabitleriEvetHayır
Değer bir ifade olabilirEvet, sabitlerden ve değişmezlerdenEvet, her değer
Otomatik olarak namespace'e alınırEvetHayır (tam adı verin)

Varsayılan olarak const kullanın, çünkü daha kısadır ve derleme zamanında kontrol edilir. Sabit bir koşula veya hesaplanan bir ada bağlı olduğunda define() kullanın.

Sabitler değiştirilemez

Bir sabite atama yapmak bir ayrıştırma hatasıdır:

<?php
const LIMIT = 10;
LIMIT = 20;
PHP Parse error:  syntax error, unexpected token "=" in /home/index.php on line 3

Aynı sabiti iki kez tanımlamak bir hata değildir, ama PHP bir uyarı yazdırır ve ilk değeri korur:

<?php
define("LIMIT", 10);
define("LIMIT", 20);
echo LIMIT; // 10
Warning: Constant LIMIT already defined in /home/index.php on line 3

Bir değer zaten atanmış olabiliyorsa (örneğin birden fazla kez yüklenen bir yapılandırma dosyasında), önce defined() ile kontrol edin:

Sabit diziler

Bir sabit bir dizi tutabilir. Onu NAME[key] ile okuyabilir, üzerinde döngü kurabilir ve bir yerden bir yere geçirebilirsiniz, ama değiştiremezsiniz.

Sınıf sabitleri

Bir sınıfın içinde const, sınıfa ait bir sabit tanımlar. Dışarıdan ClassName::NAME, içeriden self::NAME veya static::NAME ile okuyun. Sınıf sabitlerinin görünürlüğü olabilir, final olabilirler ve PHP 8.3'ten beri bir tür bildirebilirler.

STATUS_NEW ve STATUS_PAID gibi birbiriyle ilişkili sınıf sabitlerinden oluşan bir grup çoğu zaman bir enum olarak daha iyi yazılır; enum geçersiz değerlerin dolaşmasını da engeller.

Sihirli sabitler: LINE, FILE, DIR ve dahası

Sihirli sabitlerin değeri göründükleri yere göre değişir. Derleme zamanında doldurulurlar.

En çok kullanılanı, mevcut dosyanın dizini olan __DIR__ sabitidir. include yollarını ondan oluşturmak, betik hangi dizinden başlatılırsa başlatılsın onların çalışmasını sağlar: require __DIR__ . '/config.php';. Kalıbın tamamı için include ve require sayfasına bakın.

Bilinmesi gereken yerleşik sabitler

PHP'nin kendi tanımladığı birçok sabit vardır. Bunlar sürekli karşınıza çıkar:

PHP_EOL, PHP'nin çalıştığı sistemin satır sonudur (Linux ve macOS'ta "\n", Windows'ta "\r\n"). Dosyalara ve terminale yazılan metin içindir; HTML çıktısında yeni satır görünmez, bu yüzden orada <br> kullanın.

Sıkça Sorulan Sorular

PHP'de define() ile const arasındaki fark nedir?

const dosya derlenirken çözümlenen bir dil yapısıdır: en üst seviyede ve sınıfların içinde çalışır, ama if, döngüler veya fonksiyonların içinde çalışmaz. define() ise çalışma zamanında çağrılan bir fonksiyondur; bu yüzden her yerde çalışır ve ad bir değişkenden oluşturulabilir, ama sınıf sabiti tanımlayamaz.

Bir PHP sabiti dizi olabilir mi?

Evet. Hem const COLORS = ['red', 'green']; hem de define('COLORS', ['red', 'green']); çalışır ve bir elemanı COLORS[0] ile okursunuz. Dizi sonradan değiştirilemez.

PHP'de bir sabitin tanımlı olup olmadığını nasıl kontrol ederim?

Adı string olarak alan ve true ya da false döndüren defined('NAME') kullanın. Yaygın bir kalıp if (!defined('APP_ENV')) { define('APP_ENV', 'production'); } şeklindedir. Sınıf sabitleri için 'ClassName::NAME' geçirin.

PHP'de sihirli sabitler nedir?

Değeri yazıldıkları yere bağlı olan sabitlerdir: __LINE__ (mevcut satır), __FILE__ (dosyanın tam yolu), __DIR__ (dizini), __FUNCTION__, __CLASS__, __METHOD__ ve __NAMESPACE__. Her iki yanlarında iki alt çizgiyle yazılırlar ve büyük/küçük harfe duyarlı değildirler.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA