uopz_flags

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

uopz_flagsRécupère ou défini les drapeaux d'une fonction ou d'une classe

Description

uopz_flags(string $function, int $flags = PHP_INT_MAX): int
uopz_flags(string $class, string $function, int $flags = PHP_INT_MAX): int

Récupère ou défini les drapeaux d'une classe ou de l'entrée d'une fonction à l'exécution.

Liste de paramètres

class

Le nom de la classe

function

Le nom de la fonction. Si class est fournie et que une chaîne de caractères vide est passé comme function, uopz_flags() récupère ou définie les drapeaux de l'entrée de classe.

flags

Un jeu valide de drapeaux ZEND_ACC_ flags. Si omit, uopz_flags() agit commt un récupérateur.

Valeurs de retour

Si des drapeaux ont été définis, retourne les anciens drapeaux, sinon, retourne les drapeaux courants

Erreurs / Exceptions

À partir de PHP 7.4.0, si le paramètre flags est fournie uopz_flags() émet une RuntimeException, si OPcache est activé, et l'entrée de classe de class ou l'entrée de fonction function est immutable.

Historique

Version Description
PECL uopz 5.0.0 Le paramètre flags est désormait optionnel. Auparavant, ZEND_ACC_FETCH devait être passé pour utiliser uopz_flags() en tant que récupérateur.

Exemples

Exemple #1 Exemple avec 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));
?>

L'exemple ci-dessus va afficher :

bool(false)
bool(false)
int(1234567890)
bool(true)
bool(true)

Exemple #2 Transformer une Classe finale en non-finale

<?php
final class MyClass
{
}

$flags uopz_flags(MyClass::class, '');
uopz_flags(MyClass::class, ''$flags & ~ZEND_ACC_FINAL);
var_dump((new ReflectionClass(MyClass::class))->isFinal());
?>

L'exemple ci-dessus va afficher :

bool(false)