uopz_flags

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

uopz_flagsGet or set flags on function or class

Beschreibung

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

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

Parameter-Liste

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.

Rückgabewerte

If setting, returns old flags, else returns flags

Fehler/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 Beschreibung
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.

Beispiele

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

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

Beispiel #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());
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

bool(false)