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.uopz_flags
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
uopz_flags
Референца за `function.uopz-flags.php` со подобрена типографија и навигација.
uopz_flags
(PECL uopz 2 >= 2.0.2, PECL uopz 5, PECL uopz 6, PECL uopz 7)
uopz_flags — (PECL uopz 2 >= 2.0.2, PECL uopz 5, PECL uopz 6, PECL uopz 7)
= NULL
$class, string $function, int $flags Земи или постави знамиња на функција или класа): int= PHP_INT_MAX
Параметри
class-
Земи или постави ги знамињата на записот за класа или функција во време на извршување
function-
Име на класа
classИме на функцијата. Акоfunction, uopz_flags() е дадено и се помине празен стринг како flags-
ги зема или поставува знамињата на записот за класа. uopz_flags() Валиден сет на ZEND_ACC_ знамиња. Ако е изоставен,
Вратени вредности
се однесува како гетер.
Errors/Exceptions
Ако поставувате, враќа стари знамиња, инаку враќа знамиња flags се помине,
uopz_flags() фрла RuntimeExceptionФункцијата откажува и издава OPcache Имплементира интерфејс во време на извршување class
Од PHP 7.4.0, ако параметарот function е овозможено, и записот на класата на
Дневник на промени
| Верзија | = NULL |
|---|---|
| или записот за функција на |
На flags PECL uopz 5.0.0
ZEND_ACC_FETCH параметарот сега е опционален. Претходно, uopz_flags()
мораше да се помине за да се користи
|
Примери
Пример #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));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
bool(false) bool(false) int(1234567890) bool(true) bool(true)
како гетер.
<?php
final class MyClass
{
}
$flags = uopz_flags(MyClass::class, '');
uopz_flags(MyClass::class, '', $flags & ~ZEND_ACC_FINAL);
var_dump((new ReflectionClass(MyClass::class))->isFinal());
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
bool(false)
Белешки од корисници 2 забелешки
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.