Kılıflar enum üzerinde sabitler olarak temsil edildiğinden, çoğu sabit ifadesinde statik değerler olarak kullanılabilir: özellik öntanımlıları, statik değişken öntanımlıları, bağımsız değişken öntanımlıları, küresel ve sınıf sabitlerinin değerleri. Ancak diğer kılıf değerlerinde kullanılamaz, sadece enum sabitleri bir kılıfa atıfta bulunabilir.
Ancak, sonuç değerinin belirleyici olduğunu veya yöntem çağrılarının yan etkilerden arınmış olduğunu kesinlikle garanti edemediğimiz için, sayılamalarda ArrayAccess gibi örtük sihirli yöntem çağrılarına statik veya sabit tanımlar içinde izin verilmez. İşlev çağrıları, yöntem çağrıları ve özellik erişimi, sabit ifadeler içinde geçersiz işlemler olarak kalmaya devam eder.
<?php
// Bu tamamen geçerli bir sayılama tanımıdır.
enum Direction implements ArrayAccess
{
case Up;
case Down;
public function offsetExists($offset): bool
{
return false;
}
public function offsetGet($offset): mixed
{
return null;
}
public function offsetSet($offset, $value): void
{
throw new Exception();
}
public function offsetUnset($offset): void
{
throw new Exception();
}
}
class Foo
{
// Buna izin verilir.
const DOWN = Direction::Down;
// Buna izin verilmez, belirleyici olmayabilir.
const UP = Direction::Up['short'];
// Ölümcül Hata: enum üzerinde sabit ifadesi içinde [] kullanılamaz
}
// Bu, bir sabit ifadesi olmadığından tamamen geçerlidir.
$x = Direction::Up['short'];
var_dump("\$x: " . var_export($x, true));
$foo = new Foo();
?>