Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

PHP define nedir?​


PHP'de define(), çalışma zamanında sabit oluşturmak için kullanılan bir işlevdir. Sabitin değeri tanımlandıktan sonra aynı isme yeniden değer atanamaz. Sabitlere değişkenler gibi $ işaretiyle değil, doğrudan adlarıyla erişilir.

En küçük kullanım biçimi şöyledir:
Kod:
define('SITE_NAME', 'Örnek Site');
echo SITE_NAME;

Bu kodun çıktısı Örnek Site olur. SITE_NAME artık sabitin adıdır; $SITE_NAME ise farklı bir değişken anlamına gelir.

define nasıl çalışır?​


define() çağrısında ilk parametre sabitin adını, ikinci parametre değerini belirtir. Sabit adı genellikle büyük harflerle ve kelimeler arasında alt çizgi kullanılarak yazılır. Bu, zorunlu bir biçim kuralı değil, kodun okunmasını kolaylaştıran yaygın bir yaklaşımdır.

Bir sabit tanımlandıktan sonra değeri değiştirilemez:
Kod:
define('MAX_LOGIN_ATTEMPTS', 5);

echo MAX_LOGIN_ATTEMPTS;

Buradaki MAX_LOGIN_ATTEMPTS değeri uygulamanın farklı bölümlerinde aynı şekilde kullanılabilir. Değerin değişmesi gerekiyorsa sabit yerine değişken veya uygun bir yapı kullanılmalıdır.

Güncel PHP’de sabit adları büyük-küçük harfe duyarlıdır; eski örneklerdeki case-insensitive tanım seçeneğine güvenmeyin. Örneğin SITE_NAME ile site_name aynı sabit değildir. Bu nedenle tanımlarken ve kullanırken adı birebir aynı yazın.

Çalıştırılabilir örnek​


Aşağıdaki dosyayı define-ornek.php adıyla kaydedip PHP çalıştırıcısıyla çalıştırabilirsiniz:
Kod:
<?php
define('APP_NAME', 'Stok Takip');
define('MAX_PRODUCTS', 100);

if (defined('APP_NAME')) {
    echo APP_NAME . PHP_EOL;
    echo 'Ürün sınırı: ' . MAX_PRODUCTS . PHP_EOL;
}

Beklenen çıktı şöyledir:
Kod:
Stok Takip
Ürün sınırı: 100

defined() işlevi, bir sabitin tanımlı olup olmadığını denetler. İsim dinamik olarak oluşturuluyorsa veya isteğe bağlı bir sabit kullanılacaksa bu kontrol, tanımsız sabite erişimi önlemeye yardımcı olur. PHP8 ve sonrasında tanımsız sabitin doğrudan kullanımı yalnız uyarı değil Error üretir. Sabit adını metin olarak kontrol ederken defined('APP_NAME') biçimini kullanın.

define mı, const mı?​


Her ikisi de sabit tanımlamak için kullanılabilir; seçim, tanımın nerede ve ne zaman yapılacağına bağlıdır.

DurumUygun tercihNeden
Sabit doğrudan sınıf veya dosya kodunda yazılacakconstTanım daha okunabilir ve kod yapısına daha yakın olur
Sabit adı veya değeri çalışma zamanında belirlenecekdefine()İşlev çağrısı çalışma sırasında yapılabilir
Sınıf sabiti tanımlanacakconstSabit sınıfa ait olarak düzenlenir
Yapılandırma değeri merkezi olarak paylaşılacakdefine() veya constSeçim, tanımın sabit mi yoksa çalışma zamanı bilgisi mi olduğuna göre yapılır

Örneğin sınıf içinde const CACHE_KEY = 'products'; yazılabilir. Buna karşılık sabit adını bir değişkenden üretmeniz gerekiyorsa define($name, $value); daha uygundur. Sabitleri gereksiz yere çok geniş kapsamda kullanmak yerine, yalnızca gerçekten değişmemesi gereken değerlerde tercih edin.

Uygulamada doğru kullanım adımları​


  1. Değişmeyecek değeri belirleyin. Veritabanından, kullanıcıdan veya isteğin içeriğinden gelen bir değer sabit için genellikle uygun değildir.
  2. Açıklayıcı ve çakışma ihtimali düşük bir ad seçin; örneğin APP_TIMEZONE veya UPLOAD_DIRECTORY.
  3. Sabit tanımını, kullanılmadan önce çalışacak ortak bir dosyada yapın ve bu dosyayı uygulamanızın başlangıç noktasında yükleyin.
  4. Kodu çalıştırıp sabit adını $ olmadan kullandığınızı kontrol edin.
  5. Değerin tanımsız olabileceği isteğe bağlı durumlarda defined() ile kontrol ekleyin.

Sık yapılan hatalar​


Değişken işareti kullanmak: echo $APP_NAME; sabite değil, APP_NAME adlı değişkene erişir. Doğrusu echo APP_NAME; biçimindedir.

Aynı sabiti yeniden tanımlamak: Bir sabitin değerini sonradan değiştirmeye çalışmak doğru yaklaşım değildir. Değişken değer gerekiyorsa değişken kullanın; yapılandırma değeri tek bir merkezden üretilecek şekilde uygulamayı düzenleyin.

Tırnaklı sabit adını doğrudan çıktı sanmak: echo 'APP_NAME'; sabitin değerini değil, APP_NAME metnini yazdırır. Sabitin kendisini kullanmak için adı tırnaksız yazın.

Yanlış büyük-küçük harf kullanmak: APP_NAME ile App_Name farklı adlardır. Tanım ve kullanımda aynı yazımı koruyun.

Sık sorulan sorular​


define ile tanımlanan sabit fonksiyon içinde kullanılabilir mi?​


Evet. Define ile oluşturulan sabit normal yerel değişken kapsamına bağlı değildir; çağrı bir fonksiyon içinde çalıştırılsa da sabit yalnız o fonksiyona özel olmaz. Ancak define çağrısı henüz çalışmadıysa sabit de tanımlı değildir. Namespaced kodda sabitin tam adını ayrıca doğru belirleyin.

define çağrısını if içinde kullanabilir miyim?​


Evet. Define çalışma zamanında çağrılan bir işlevdir. Buna karşılık dosya düzeyi const bildirimini if, döngü veya fonksiyon gövdesine koyamazsınız; sınıf sabitinin const kullanımını bu kuralla karıştırmayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.