uopz_flags

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

uopz_flagsПолучить или установить флаги для функции или класса

Описание

uopz_flags(string$function, int$flags = PHP_INT_MAX): int
uopz_flags(string$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)
To Top