uopz_flags
(PECL uopz >= 2.0.2)
uopz_flags — Get or set flags on function or class
Description
int uopz_flags
( string
$class
, string $function
, int $flags
)
int uopz_flags
( string
$function
, int $flags
)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
-
flags
-
A valid set of ZEND_ACC_ flags, ZEND_ACC_FETCH to read flags
Return Values
If setting, returns old flags, else returns flags
Examples
Example #1 uopz_flags() example
<?php
class Test {
public function method() {
return __CLASS__;
}
}
$flags = uopz_flags("Test", "method", ZEND_ACC_FETCH);
var_dump((bool) (uopz_flags("Test", "method", ZEND_ACC_FETCH) & ZEND_ACC_PRIVATE));
var_dump((bool) (uopz_flags("Test", "method", ZEND_ACC_FETCH) & 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_FETCH) & ZEND_ACC_PRIVATE));
var_dump((bool) (uopz_flags("Test", "method", ZEND_ACC_FETCH) & ZEND_ACC_STATIC));
?>
The above example will output something similar to:
bool(false) bool(false) int(1234567890) bool(true) bool(true)
Коментарии
If the method name is set to an empty string, then the flags for the CLASS itself will be affected, instead of an individual method. This can be used to remove the "final" attribute from a class.
<?php
declare(strict_types=1);
final class MyClass { function mymethod() {} };
uopz_flags(MyClass::class, '', 0);
?>
Note: Although not documented, setting the method to NULL will also target the CLASS flags, however, that syntax will clash with strict types because of the developer's improper function signature.
To clarify the above hint:
"...the class entry of class or the function entry of function is immutable"
Neither PHP class or function definitions have any "immutable" keyword - so this note is confusing, as it implies that a PHP programmer has any control over this. In reality, the "immutable" state mentioned is an internally-controlled optimization/shared memory feature of OPcache.
Consequently, if one has a need to set (alter) the flags of a PHP class or function by means of "uopz_flags()", then it is necessary to EXCLUDE the PHP script of the referenced class or function from OPcache, using the "opcache.blacklist_filename" INI parameter.