Sabitlerin her sınıf için ayrı ayrı tanımlanabilmesi mümkündür. Sabitler diğer değişkenlerden tanımlanmaları ve kullanılmaları sırasında başlarına getirilmeyen $ imi sayesinde ayrılırlar. Sabit sınıflarının öntanımlı görünülüğü public'tir.
Değer, örneğin, bir değişken, bir sınıf özelliği, bir matematiksel işlemin sonucu veya bir işlev çağrısı değil, bir sabit ifade olmalıdır.
Ayrıca, sınıf arayüzlerinin de kendi sabitlerinin olması mümkündür. Örnekler için Nesne Arayüzleri belgesine bakınız.
PHP 5.3.0'dan itibaren, bir sınıfa bir değişken kullanarak atıfta bulunmak mümkündür. Değişkenin değeri, self, parent, static gibi bir anahtar sözcük olamaz.
Sınıf sabitlerinin her sınıf örneği için değil her sınıf için bir kere ayrıldığını unutmayın.
Örnek 1 - Bir sabitin tanımlanması ve kullanımı
<?php
class MyClass
{
const CONSTANT = 'sabit değer';
function showConstant() {
echo self::CONSTANT . "\n";
}
}
echo MyClass::constant . "\n";
$classname = "MyClass";
echo $classname::CONSTANT . "\n"; // PHP 5.3.0'dan itibaren
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT."\n"; // PHP 5.3.0'dan itibaren
?>
Örnek 2 - Duruk veri örneği
<?php
class foo {
// PHP 5.3.0'dan itibaren
const BAR = <<<'EOT'
bar
EOT;
// PHP 5.3.0'dan itibaren
const BAZ = <<<EOT
baz
EOT;
}
?>
Bilginize:
Duruk veri bağlamında yorumlanan çok satırlı metinler (heredoc) ve yorumlanmayan çok satırlı metinlerle (nowdoc) ssbitlerin ilklendirilmesi desteği desteği 5.3.0'da eklenmiştir.
Özel ::class
sabiti desteği 5.5.0'da eklenmiş olup,
derleme sırasında tamamen nitelenmiş sınıf ismi çözünürlüğü mümkün
kılınmıştır ve isim alanlı sınıflar için kulllanışlıdır:
Örnek 3 - İsim alanlı ::class örneği
<?php
namespace foo {
class bar {
}
echo bar::class; // foo\bar
}
?>
Örnek 4 Sabit ifadesi örneği
<?php
const BİR = 1;
class foo {
// PHP 5.6.0 ve sonrası
const İKİ = BİR * 2;
const ÜÇ = BİR + self::İKİ;
const CÜMLE = 'ÜÇ için değer: '.self::THREE;
}
?>
Bir sınıf sabiti bağlamında sayısal ve dize sabitlerini ve/veya sabitleri içeren bir sayısal ifade sağlamak mümkündür.
Bilginize:
Sabit ifadesi desteği PHP 5.6.0'da eklendi.
Örnek 5 - Sınıf sabiti görünürlük değiştiricileri
<?php
class Foo {
// PHP 7.1.0 ve sonrası
public const BAR = 'bar';
private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>
Yukarıdaki örneğin PHP 7.1 çıktısı:
bar Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
Bilginize:
Sınıf sabitlerinde görünürlük değiştiricileri desteği PHP 7.1.0'da eklendi.