forward_static_call_array

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

forward_static_call_arrayAppelle une fonction de rappel avec un tableau de paramètres, en préservant la classe appelée courante

Description

function forward_static_call_array(callable $callback, array $args): mixed

Appelle une fonction ou une méthode utilisateur, nommée callback, avec les arguments passés dans un tableau, similairement à call_user_func_array(). Lorsqu'elle est appelée depuis une méthode et que la fonction de rappel est une méthode, elle effectue un appel transmis, de sorte que static:: à l'intérieur de la méthode se résout vers la même classe appelée que dans l'appelant. Cela est utile pour les fonctions de rappel de méthodes statiques qui devraient se comporter comme self:: ou parent::.

Note:

Contrairement à forward_static_call(), cette fonction ne nécessite pas de portée de classe active : appeler forward_static_call() hors d'une classe lève une Error, ce que cette fonction ne fait pas.

Liste de paramètres

callback

La fonction ou la méthode appelée. Ce paramètre peut être un tableau, avec le nom de la classe et de la méthode, ou une chaîne, avec le nom de la fonction.

args

Les paramètres à passer à la fonction de rappel, sous forme de tableau.

Note:

Pour passer un paramètre par référence, l'élément correspondant de args doit être une référence.

Valeurs de retour

Retourne le résultat de la fonction, ou false en cas d'erreur.

Exemples

Exemple #1 Exemple avec forward_static_call_array()

<?php

class A
{
    const NAME = 'A';
    public static function test() {
        $args = func_get_args();
        echo static::NAME, " ".join(',', $args)." \n";
    }
}

class B extends A
{
    const NAME = 'B';

    public static function test() {
        echo self::NAME, "\n";
        forward_static_call_array(array('A', 'test'), array('encore', 'args'));
        forward_static_call_array( 'test', array('autres', 'args'));
    }
}

B::test('foo');

function test() {
        $args = func_get_args();
        echo "C ".join(',', $args)." \n";
    }

?>

L'exemple ci-dessus va afficher :

B
B encore,args 
C autres,args

Voir aussi

  • forward_static_call() - Appelle une fonction de rappel en préservant la classe appelée courante
  • call_user_func() - Appelle une fonction de rappel fournie par le premier argument
  • call_user_func_array() - Appelle une fonction de rappel avec les paramètres rassemblés en tableau
  • is_callable() - Détermine si une valeur peut être appelée comme une fonction dans la portée courante
add a note

User Contributed Notes 2 notes

up
2
nino dot skopac at gmail dot com
10 years ago
Regarding namespaces:

Be sure to include fully namespaced class path:

<?php
forward_static_call_array(
    array('NAMESPACE\CLASS_NAME', 'STATIC_METHOD'),
    $params
);
up
0
israfilov93 at gmal dot com
8 years ago
one of academic example, when forward_static_call() can be useful

<?php

class A
{
    public static function test()
    {
        var_dump('we were here');
        return static::class;
    }
}

class B extends A
{
    public static function test()
    {
        return self::class;
    }
}

class C extends B
{
    public static function test()
    {
        $grandParent = get_parent_class(parent::class); // $grandParent is A
        return forward_static_call([$grandParent, __FUNCTION__]); // calls A::test()
    }
}

// prints 
// string(12) "we were here"
// string(1) "C"
var_dump(C::test());