PHP 8.1.9 Released!

Valores enum em expressões constantes

Como os casos são representados como constantes no próprio enum, eles podem ser usados como valores estáticos na maioria das expressões constantes: padrões de propriedades, padrões de variáveis estáticas, padrões de parâmetros, valores constantes globais e de classes. Eles não podem ser usados em outros valores de caso enum, mas constantes normais podem se referir a um caso enum.

No entanto, chamadas implícitas de métodos mágicos como ArrayAccess em enums não são permitidas em definições estáticas ou de constantes já que não podemos garantir absolutamente que o valor resultante é determinístico ou que a invocação do método é livre de efeitos colaterais. Chamadas de funções, chamadas de métodos e acesso às propriedades continuam a ser operações inválidas em expressões constantes.

<?php
// Esta é uma definição de Enum perfeitamente legal.
enum Direcao implements ArrayAccess
{
    case 
Cima;
    case 
Baixo;

    public function 
offsetGet($val) { ... }
    public function 
offsetExists($val) { ... }
    public function 
offsetSet($val) { throw new Exception(); }
    public function 
offsetUnset($val) { throw new Exception(); }
}

class 
Foo
{
    
// Isto é permitido.
    
const Bar Direcao::Baixo;

    
// Isto não é permitido, pois pode não ser determinístico.
    
const Bar Direcao::Cima['curta'];
    
// Fatal error: Cannot use [] on enums in constant expression
}

// Isto é perfeitamente legal, porque não é uma expressão constante.
$x Direcao::Cima['curta'];
?>
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top