Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Moment de création de la closure

<?php

class x {
   /*    
    function foo() {
        echo __METHOD__.PHP_EOL;
    }
    */
}

$object = new x();
$method = 'foo';

$callable = [$object, $method];
//$callable(1); // Call to undefined method stdClass::foo()

// No check until execution
$closure = fn (...$args) => $object->$method(...$args);
//$closure(1); // Call to undefined method stdClass::foo()

//Call to undefined method stdClass::foo()
$closure = [$object, $method](...);

//Failed to create closure from callable: class stdClass does not have a method "foo" 
Closure::fromCallable([$object, $method]);

Voici quatre façons de créer une closure : un tableau callable, une fonction fléchée, un callable de première classe et une méthode statique. Toutes produisent la même fonctionnalité. Ici, nous nous concentrons sur le moment des vérifications.

Le tableau callable se contente de collecter les variables : la vérification de ces valeurs intervient au moment de l’appel.

La fonction fléchée collecte également les valeurs et ne signale une erreur qu’au moment de l’exécution.

Le callable de première classe vérifie les valeurs et signale un appel échoué à la méthode inexistante : tout cela, au moment de la définition. Les valeurs doivent donc être cohérentes à ce moment-là.

La méthode statique Closure::fromCallable() vérifie également les valeurs au moment de son exécution (pas au moment de l’exécution de la closure résultante), et génère un message d’erreur plus explicite : Failed to create closure from callable: class stdClass does not have a method "foo".

Laquelle est votre préférée ?

See Also

PHP Features

Last updated: 11 October 2026