Une fermeture est une fonction qui encapsule l'état environnant lors de sa création. Même si l’environnement dans lequel se situe la fermeture n’existe plus, l’état encapsulé dans la fermeture existe toujours. Les fermetures PHP et les fonctions anonymes utilisent la même syntaxe que les fonctions ordinaires, mais les fermetures et les fonctions anonymes sont en réalité des objets (instances de la classe Closure) déguisés en fonctions. Laissez-moi vous présenter les connaissances sur les fermetures et les fonctions anonymes en PHP. Les amis qui en ont besoin peuvent s'y référer. J'espère que cela pourra aider tout le monde.
Les fonctions anonymes sont des fonctions sans noms. Les fonctions anonymes peuvent être attribuées à des variables et transmises comme n'importe quel autre objet PHP. Cependant, les fonctions anonymes restent des fonctions, elles peuvent donc être appelées et des paramètres peuvent être transmis. Les fonctions anonymes sont particulièrement adaptées comme rappels de fonctions ou de méthodes.
Remarque : En théorie, les fermetures et les fonctions anonymes sont des concepts différents. Cependant, PHP le traite comme le même concept. Par conséquent, lorsque nous parlons de fermetures, nous faisons également référence à des fonctions anonymes, et vice versa.
Les fermetures PHP et les fonctions anonymes utilisent la même syntaxe que les fonctions ordinaires, mais les fermetures et les fonctions anonymes sont en fait des objets (instances de la classe Closure) déguisés en fonctions.
Création d'une fermeture
$closure = function($name){ return sprintf("Hello %s", $name); } echo $closure("jerry"); // 检测$closure变量是否是一个闭包 var_dump($closure instanceof Closure);
Le code ci-dessus crée un objet de fermeture puis l'assigne à la variable $closure. Les fermetures sont très similaires aux fonctions PHP ordinaires. Elles utilisent la même syntaxe, reçoivent des paramètres et peuvent renvoyer des valeurs.
Explication : La raison pour laquelle nous pouvons appeler la variable $closure est que la valeur de cette variable est une fermeture et que l'objet de fermeture implémente la méthode magique __invoke(). Tant qu'il y a () après le nom de la variable, PHP recherchera et appellera la méthode __invoke().
Utilisation des fermetures
Nous utilisons généralement les fermetures PHP comme rappels pour les fonctions et les méthodes. De nombreuses fonctions PHP utilisent des fonctions de rappel, telles que array_map() et preg_replace_callback(). Dans l'exemple suivant, nous utiliserons array_map() pour traiter le tableau et incrémenter chaque élément du tableau de 1 :
$nubmers = array_map(function($number){ return $number++; }, [1,2,3]); var_dump($numbers);
function Car ($name){ return function($statu)use($name){ return sprintf("Car %s is %s", $name, $statu); } } // 将车名封装在闭包中 $car = Car("bmw"); // 调用车的动作 // 输出--> "bmw is running" echo $car("running");
class TestClosure { private $name=[]; private $age; private $sex; public function addPerson($name, $personCallback){ // 将闭包对象绑定当前实例 $this->name[$name] = $personCallback->bindTo($this, __CLASS__); } public function display($name){ foreach ($this->name as $key => $callback){ if($key == $name){ // 执行闭包对象,将闭包状态附加到类 $callback(); } } echo "name : {$name}\n"; echo "age : {$this->age}\n"; echo "sex : {$this->sex}\n"; } } $person = new TestClosure(); $person->addPerson("jerry", function(){ $this->age = 19; $this->sex = "man"; }); $person->display("jerry"); /** output name : jerry age : 19 sex : man */
Comment utiliser les fermetures pour obtenir des variables externes en PHP
Compréhension approfondie des fermetures javascript
Que sont les fonctions anonymes, les fonctions imbriquées et les fermetures
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!