PHPKonf Istanbul PHP Conference 2019 - Call for Papers

Söz dizimi

Bir sabiti define() işlevini kullanarak veya PHP 5.3.0'dan itibaren sınıf tanımlarının dışında const anahtar sözcüğünü kullanarak tanımlayabilirsiniz. define() bir sabitin keyfî bir ifadede tanımlanmasına izin verir. const ile ilgili kısıtlamalara aşağıdaki paragrafta yer verilmiştir. Bir sabit tanımlandıktan sonra asla değiştirilemez ve tanımsız yapılamaz.

PHP 5.6.0 öncesinde, const kullanılırken sabitlere yalnızca bir sayıl değer (boolean, integer, float veya string) atanabilirdi. PHP 5.6 itibariyle, bir sabiti sayısal bir ifade hatta bir array sabit olarak tanımlamak mümkündür. 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ğerini basitçe ismini belirterek alabilirsiniz. Değişkenlerin aksine, sabitlerin önüne $ imi eklemeMEniz gerekir. Bunun yanında, bir sabitin ismini devingen şekilde kullanmak isterseniz, sabitin değerini okumak için constant() işlevini de kullanabilirsiniz. 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 ismi kullanırsanız, PHP, bir sabit değil bir sayıl değer kullanmak istediğinizi varsayar ve sabiti string türünde bir değer (SABIT yerine "SABIT" ) olarak ele alır. PHP 7.2.0 ve sonrasında bu önerilmemekta olup böyle bir durumda bir E_WARNING çıktılanır (evvelce bir E_NOTICE çıktılanırdı). Ayrıca, $foo[bar] kullanımının (evvelce define() işleviyle bar isminde bir sabit tanımlamamışsanız) neden yanlış olduğuyla ilgili açıklamayı $foo[bar] neden yanlıştır? başlığı altında bulabilirsiniz. Bu (tamamen) nitelenmiş sabitlere uygulanmaz, çünkü tanımsızsa ölümcül bir hataya yol açar. Bir sabitin tanımlı olup olmadığını defined() işlevi sayesinde kolayca öğrenebilirsiniz.

Sabitler ve değişkenler arasındaki farklar:

  • Bir sabit ismi $ imi ile başlamaz.
  • PHP 5.3 ve öncesinde, sabitler basit bir atama ile değil, sadece define() işlevi kullanılarak tanımlanabilirler.
  • 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 bir sayıl değerlerle (boolean, integer, float veya string türünde bir değerle) sonuçlanabilir. PHP 5.6 ve sonrasında const sözcüğünü kullanarak (örneğin, const FOO = array(1,2,3)[0];), PHP 7.0 ve sonrasında ise define() kullanarak dizi sabitler tanımlamak mümkünse de sonuçta değerin izin verilen türde olması gerekir.

Örnek 1 - Sabitlerin Tanımlanması

<?php
define
("CONSTANT""Merhaba dünya.");
echo 
CONSTANT// "Merhaba dünya" çıktılar.
echo Constant// "Constant" çıktılar ve bir uyarı gösterir.
?>

Örnek 2 - Sabitlerin const ile tanımlanması

<?php
// PHP 5.3.0 ve sonrasında çalışır
const SABIT 'Merhaba Dünya';

echo 
SABIT;

// PHP 5.6.0 ve sonrasında çalışır
const DIGER_SABIT SABIT.'; Elveda Dünya';
echo 
DIGER_SABIT;

const 
HAYVANLAR = array('köpek''kedi''kuş');
echo 
HAYVANLAR[1]; // "kedi" çıktılanır

// PHP 7 ve sonrasında çalışır
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.

Bilginize:

const anahtar sözcüğü ile tanımlanan sabitler daima harf büyüklüğüne duyarlıyken define() ile tanımlanan sabitler harf büyüklüğüne duyarlı olmayabilir.

Ayrıca, Sınıf Sabitleri belgesine de bakınız.

add a note add a note

User Contributed Notes 1 note

up
5
login at (two)view dot de
1 year ago
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

does work as expected.
To Top