闭包和 “use”
本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 2 课,共 68 课。
默认情况下,匿名函数只能访问作为参数传递给它们的变量。但如果你需要让闭包访问外围作用域中的变量,该怎么办?这时就需要用到 use 关键字。
use 关键字允许闭包从父作用域“捕获”变量,并在函数内部使用这些变量:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // 输出:Welcome, Bob!
?>注意,$message 是在函数外部定义的,但在参数列表后添加 use ($message),闭包就可以访问并使用这个变量。你可以用逗号分隔多个变量来捕获它们:use ($var1, $var2)。
这个功能让闭包的能力更强,使它们在保持匿名函数灵活性的同时,还能使用周围上下文中的数据。
挑战
简单使用 use 关键字创建一个匿名函数,从外围作用域中捕获折扣百分比。该函数应接收一个价格作为参数,并返回应用折扣后的最终价格。
你会收到两个输入:折扣百分比和原价。读取这两个输入,创建一个捕获折扣百分比的闭包,用价格调用该闭包,并输出折扣后的最终价格。
输入格式:两行,第一行包含折扣百分比(一个数字),第二行包含原价(一个可能带小数的数字)
预期输出:应用折扣后的最终价格
亲手试试
<?php
// 读取输入
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// TODO:创建一个匿名函数,使用 'use' 捕获折扣百分比
// 该函数应接收价格参数,并返回折扣后的最终价格
// TODO:用价格调用闭包,并存储结果
// 输出最终价格
echo $finalPrice;
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: PHP 在线编译器