uopz_flags
(PECL uopz 2 >= 2.0.2, PECL uopz 5, PECL uopz 6)
uopz_flags — Получить или установить флаги для функции или класса
Описание
$function
, int $flags
= PHP_INT_MAX
) : int$class
, string $function
, int $flags
= PHP_INT_MAX
) : intПолучить или установить флаги для записи функции или класса во время выполнения
Список параметров
-
class
-
Имя класса
-
function
-
Имя функции. Если задан
class
и пустая строка передана какfunction
, uopz_flags() получает или устанавливает флаги записи класса. -
flags
-
Корректный набор флагов ZEND_ACC_. Если не заданы, uopz_flags() используется как геттер.
Возвращаемые значения
При установке новых флагов, возвращает старые флаги, иначе возвращает текущие флаги
Ошибки
Начиная с PHP 7.4.0, если передан параметр flags
,
uopz_extends() выбрасывает RuntimeException,
если OPcache включен
и запись класса либо class
,
либо parent
(если это признак) неизменны.
Список изменений
Версия | Описание |
---|---|
PECL uopz 5.0.0 |
Параметр flags теперь необязательный. Ранее
ZEND_ACC_FETCH должен был передаваться, чтобы uopz_flags()
использовался как геттер.
|
Примеры
Пример #1 Пример использования uopz_flags()
<?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));
?>
Результат выполнения данного примера:
bool(false) bool(false) int(1234567890) bool(true) bool(true)
Пример #2 "Отменить final" класса
<?php
final class MyClass
{
}
$flags = uopz_flags(MyClass::class, '');
uopz_flags(MyClass::class, '', $flags & ~ZEND_ACC_FINAL);
var_dump((new ReflectionClass(MyClass::class)->isFinal());
?>
Результат выполнения данного примера:
bool(false)