uopz_flags

Get or set flags on function or class

Description

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

Get or set the flags on a class or function entry at runtime

Parameters

class

The name of a class

function

The name of the function. If class is given and an empty string is passed as function, uopz_flags gets or sets the flags of the class entry.

flags

A valid set of ZEND_ACC_ flags. If omitted, uopz_flags acts as getter.

Return Values

If setting, returns old flags, else returns flags

Errors/Exceptions

As of PHP 7.4.0, if the parameter flags is passed, uopz_flags throws a RuntimeException, if OPcache is enabled, and the class entry of class or the function entry of function is immutable.

Changelog

Version Description
PECL uopz 5.0.0 The flags parameter is now optional. Formerly, ZEND_ACC_FETCH had to be passed to use uopz_flags as getter.

Examples

Example #1 uopz_flags example

<?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));
?>

The above example will output:

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

Example #2 "Unfinalize" a Class

<?php
final class MyClass
{
}

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

The above example will output:

bool(false)