uopz_flags

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

uopz_flagsRecupera o define los flags de una función o clase

Descripción

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

Recupera o define los flags de una clase o entrada de función en tiempo de ejecución.

Parámetros

class

El nombre de la clase

function

El nombre de la función. Si class es proporcionado y una chaîne de caractères vacía es pasada como function, uopz_flags() recupera o define los flags de la propia clase.

flags

Un conjunto válido de flags ZEND_ACC_. Si se omite, uopz_flags() actúa como recuperador.

Valores devueltos

Si se definen flags, devuelve los flags antiguos, de lo contrario, devuelve los flags actuales

Errores/Excepciones

A partir de PHP 7.4.0, si el parámetro flags es proporcionado uopz_flags() emite una RuntimeException, si OPcache está activado, y la entrada de clase de class o la entrada de función function es inmutable.

Historial de cambios

Versión Descripción
PECL uopz 5.0.0 El parámetro flags es ahora opcional. Anteriormente, ZEND_ACC_FETCH debía ser pasado para usar uopz_flags() como recuperador.

Ejemplos

Ejemplo #1 Ejemplo con 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));
?>

El resultado del ejemplo sería:

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

Ejemplo #2 Transformar una clase final en no final

<?php
final class MyClass
{
}

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

El resultado del ejemplo sería:

bool(false)