array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'en', ), 'this' => array ( 0 => 'function.uopz-flags.php', 1 => 'uopz_flags', ), 'up' => array ( 0 => 'ref.uopz.php', 1 => 'Uopz Functions', ), 'prev' => array ( 0 => 'function.uopz-extend.php', 1 => 'uopz_extend', ), 'next' => array ( 0 => 'function.uopz-function.php', 1 => 'uopz_function', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'en', 'path' => 'reference/uopz/functions/uopz-flags.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PECL uopz 2 >= 2.0.2, PECL uopz 5, PECL uopz 6, PECL uopz 7)
uopz_flags — Get or set flags on function or class
Get or set the flags on a class or function entry at runtime
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.
If setting, returns old flags, else returns flags
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.
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.
|
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)