While most constants are only defined in one namespace, the case-insensitive true, false, and null constants are defined in ALL namespaces. So, this is not valid:
<?php namespace false;
const ENT_QUOTES = 'My value';
echo ENT_QUOTES;//Outputs as expected: 'My value'
const FALSE = 'Odd, eh?';//FATAL ERROR! ?>
Fatal error: Cannot redeclare constant 'FALSE' in /Volumes/WebServer/0gb.us/test.php on line 5
Söz dizimi
Bir sabiti define() işlevini kullanarak veya PHP 5.3.0'dan itibaren sınf tanımlarının dışında const anahtar sözcüğünü kullanarak tanımlayabilirsiniz. Bir sabit tanımlandıktan sonra, asla değiştirilemez ya da tanımsız yapılamaz.
Bir sabit ismine yalnızca bir sayıl değer (boolean, integer, float veya string) atanabilir. Sabitleri resource olarak kayıt altına almak mümkündür, fakat 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 eklemeniz gerekmez. Bunun yanında, bir sabitin ismini devingen şekilde elde etmek 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
TRUEile $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. Böyle bir
durumda E_NOTICE seviyesinde bir
hata çıktılanır. 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. 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.
- 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 sabite sadece bir sayıl değer (boolean, integer, float veya string türünde bir değer) atanabilir.
Ö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 bilgi iletisi gösterir.
?>
Örnek 2 - Sabitlerin const ile tanımlanması
<?php
// PHP 5.3.0 ve sonrasında çalışır
const CONSTANT = 'Merhaba Dünya';
echo CONSTANT;
?>
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 veya if deyimlerinin içinde bildirilemez.
Ayrıca, Sınıf Sabitleri belgesine de bakınız.
Don't let the comparison between const (in the global context) and define() confuse you: while define() allows expressions as the value, const does not. In that sense it behaves exactly as const (in class context) does.
<?php
// this works
/**
* Path to the root of the application
*/
define("PATH_ROOT", dirname(__FILE__));
// this does not
/**
* Path to configuration files
*/
const PATH_CONFIG = PATH_ROOT . "/config";
// this does
/**
* Path to configuration files - DEPRECATED, use PATH_CONFIG
*/
const PATH_CONF = PATH_CONFIG;
?>
Constant names shouldn't include operators. Otherwise php doesn't take them as part of the constant name and tries to evaluate them:
<?php
define("SALARY-WORK",0.02); // set the proportion
$salary=SALARY-WORK*$work; // tries to subtract WORK times $work from SALARY
?>
