CakeFest 2024: The Official CakePHP Conference

Söz dizimi

Bir sabit define() işlevi veya const anahtar sözcüğü kullanılarak tanımlanabilir. define() bir sabitin rastgele bir ifadede tanımlanmasına izin verir. const anahtar sözcüğünün ise aşağıdaki paragrafta açıklanan bazı kısıtlamaları vardır. Bir sabit tanımlandıktan sonra asla değiştirilemez ve tanımsız yapılamaz.

const anahtar sözcüğü kullanılırken, yalnızca sayıl (bool, int, float ve string) ifadeler ve yalnızca sayıl ifadeler içeren sabit dizileri kabul edilir. 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ğerine basitçe ismi belirtilerek erişilebilir. Değişkenlerin aksine, sabitlerin önüne $ imi eklemeMEniz gerekir. Bir sabitin ismi dinamik olarak belirtiliyorsa, sabitin değerini okumak için constant() işlevini kullanmak mümkündür. 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 kullanırsanız, bir Error yavrulanır. PHP 8.0.0 öncesinde, tanımsız sabitler çıplak bir kelime dizesi olarak yorumlanır (SABIT yerine "SABIT" gibi). PHP 7.2.0 ve sonrasında bu kullanım önerilmemekte olup böyle bir durumda bir E_WARNING çıktılanır. PHP 7.2.0 öncesinde ise E_NOTICE seviyesinde bir hata çıktılanırdı. Ayrıca $foo[bar]'ın (bar bir sabit olmadıkça) neden yanlış olduğuna dair açıklamaya da bakın. Bu durum, tanımlanmadıkları takdirde daima bir Error yavrulayan (tamamen) nitelenmiş sabitlere uygulanmaz.

Bilginize: Bir sabitin atanıp atanmadığına bakmak için defined() işlevini kullanın.

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

  • Bir sabit ismi $ imi ile başlamaz.
  • 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 sayıl değerlere veya dizilere çözümlenebilir.

Örnek 1 - Sabitlerin Tanımlanması

<?php
define
("CONSTANT", "Merhaba dünya.");
echo
CONSTANT; // "Merhaba dünya" çıktılar.
echo Constant; // Hata verir: Tanımlanmamış sabit "Constant"
// PHP 8.0.0 öncesinde. "Constant" çıktılanıp bir uyarı verilirdi.
?>

Örnek 2 - Sabitlerin const ile tanımlanması

<?php
// Basit sayıl değer
const SABIT = 'Merhaba Dünya';

echo
SABIT;

// Sayıl ifade
const DIGER_SABIT = SABIT.'; Elveda Dünya';
echo
DIGER_SABIT;

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

// Sabit dizisi
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.

Ayrıca Bakınız

add a note

User Contributed Notes 2 notes

up
32
souzanicolas87 at gmail dot com
2 years ago
the documentation doesn't go too far in explaining the crucial difference between the two ways of declaring constants in PHP.

Const is handled at compile time, define() at run time. For this reason, a constant cannot be conditionally defined using Const, for example.

Another difference we can notice occurs in the constant declarations in classes. Const infiltrates the class scope, while define() leaks into the global scope.

<?php

Class Myclass (){
const
NAME = "Nicolas";
}

?>

The NAME constant is within the scope of the MyClass class.
up
8
login at (two)view dot de
6 years 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