uopz_flags

(PECL uopz 2 >= 2.0.2, PECL uopz 5, PECL uopz 6, PECL uopz 7)

uopz_flagsObtém ou define sinalizadores em função ou classe

Descrição

uopz_flags(string $function, int $flags = PHP_INT_MAX): int
uopz_flags(string $class, string $function, int $flags = PHP_INT_MAX): int

Obtém ou define os sinalizadores em uma entrada de classe ou função em tempo de execução.

Parâmetros

class

O nome de uma classe

function

O nome da função. Se class for fornecido e uma string vazia for passada como function, uopz_flags() obtém ou define os sinalizadores da entrada da classe.

flags

Um conjunto válido de sinalizadores ZEND_ACC_. Se omitido, uopz_flags() atua como obtentora.

Valor Retornado

Se os sinalizadores estiverem sendo definidos, retorna os anteriores, senão retorna os atuais.

Erros/Exceções

A partir do PHP 7.4.0, se o parâmetro flags for passado, uopz_flags() lança uma RuntimeException, se OPcache estiver habilitado, e a entrada de classe de class ou a entrada de função de function for imutável.

Registro de Alterações

Versão Descrição
PECL uopz 5.0.0 O parâmetro flags agora é opcional. Anteriormente, ZEND_ACC_FETCH precisava ser passado para usar uopz_flags() como obtentora.

Exemplos

Exemplo #1 Exemplo de uopz_flags()

<?php
class Test {
public function
method() {
return
__CLASS__;
}
}

$flags = uopz_flags("Test", "method");

var_dump((bool) (uopz_flags("Test", "method") & ZEND_ACC_PRIVATE));
var_dump((bool) (uopz_flags("Test", "method") & ZEND_ACC_STATIC));

var_dump(uopz_flags("Test", "method", $flags|ZEND_ACC_STATIC|ZEND_ACC_PRIVATE));

var_dump((bool) (uopz_flags("Test", "method") & ZEND_ACC_PRIVATE));
var_dump((bool) (uopz_flags("Test", "method") & ZEND_ACC_STATIC));
?>

O exemplo acima produzirá:

bool(false)
bool(false)
int(1234567890)
bool(true)
bool(true)

Exemplo #2 "Desfinalizando" uma classe

<?php
final class MyClass
{
}

$flags = uopz_flags(MyClass::class, '');
uopz_flags(MyClass::class, '', $flags & ~ZEND_ACC_FINAL);
var_dump((new ReflectionClass(MyClass::class))->isFinal());
?>

O exemplo acima produzirá:

bool(false)