首页 » PHP教程 » phpis_callable技巧_PHP中 closure and callable的差异

phpis_callable技巧_PHP中 closure and callable的差异

访客 2024-11-20 0

扫一扫用手机浏览

文章目录 [+]

Hello,大家好呀,我是杨杨!
本日水一篇,剖析下PHP中 closure and callable的差异。

在 PHP 中,闭包是一个匿名函数,可以分配给变量或作为参数通报给其他函数。
这是一种动态创建函数的方法,无需利用关键字显式定义它们。
function

phpis_callable技巧_PHP中 closure and callable的差异

闭包在以下情形下非常有用:您希望创建一个函数,该函数可以从其周围范围访问变量,纵然在外部函数完成实行之后也是如此。
此行为称为“关闭”变量。

phpis_callable技巧_PHP中 closure and callable的差异
(图片来自网络侵删)

下面是在 PHP 中创建和利用闭包的示例:

$greeting = function ($name) { echo "Hello, $name!";};$greeting('John'); // Output: Hello, John!

在上面的代码中,我们为变量分配了一个匿名函数。
此函数接管一个参数,并利用该参数回显问候。
$greeting$name

闭包常日在处理高阶函数时利用,例如 、 和 ,您可以在个中将回调函数作为参数通报。
array_maparray_filterusort

$numbers = [1, 2, 3, 4, 5];// Double each number using a closure$doubled = array_map(function ($n) { return $n 2;}, $numbers);print_r($doubled); // Output: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )

在此示例中, 将闭包运用于数组的每个元素,将每个数字更加并返回一个新数组。
array_map$numbers$doubled

闭包功能强大,由于它们可以“记住”创建它们的环境中的变量。
例如:

function createMultiplier($factor) { return function ($number) use ($factor) { return $number $factor; };}$double = createMultiplier(2);$triple = createMultiplier(3);echo $double(5); // Output: 10echo $triple(5); // Output: 15

在这种情形下,该函数返回一个闭包,该闭包将给定的数字乘以通报给 的 。
闭包“关闭”变量,使其纵然在完成实行后也可用。
我们可以通过利用不同的因子调用来创建不同的乘数,并在往后重复利用它们。
createMultiplier$factorcreateMultiplier$factorcreateMultipliercreateMultiplier

闭包供应了灵巧性,并支持 PHP 中更高等的编程技能。
它们在函数式编程、事宜处理和异步编程范例中特殊有用。

在 PHP 中,可调用工具是一种类型,表示对可调用的函数或方法的引用。
它可用于动态调用函数或方法,或将它们作为参数通报给其他函数。

PHP 中有几种类型的可调用工具:

函数:可调用工具可以通过将其名称用作字符串来引用常规 PHP 函数。

function greet($name) { echo "Hello, $name!";}$callable = 'greet';$callable('John'); // Output: Hello, John!

在此示例中,变量保存函数“greet”的名称。
可以通过在可调用变量后附加括号来调用它。
$callable()

2. 方法:可调用工具也可以指工具的方法或类的静态方法。

class MyClass { public function greet($name) { echo "Hello, $name!"; }}$obj = new MyClass();$callable = [$obj, 'greet'];$callable('John'); // Output: Hello, John!

在这种情形下,可调用工具是包含工具实例或类名和方法名的数组。

3. 匿名函数(闭包):如前所述,闭包也是可调用的。

$callable = function ($name) { echo "Hello, $name!";};$callable('John'); // Output: Hello, John!

在这里,闭包被赋值给变量,它可以像任何其他可调用工具一样被调用。
$callable

4. 静态方法:可调用工具可以利用类名作为字符串来引用类的静态方法。

class MyClass { public static function greet($name) { echo "Hello, $name!"; }}$callable = ['MyClass', 'greet'];$callable('John'); // Output: Hello, John!

在这种情形下,可调用工具是包含类名和静态方法名的数组。

5. 可调用工具:实现该方法的工具可以被视为可调用工具。
__invoke()

class Greeting { public function __invoke($name) { echo "Hello, $name!"; }}$obj = new Greeting();$callable = $obj;$callable('John'); // Output: Hello, John!

在此示例中,类实现该方法,许可该类的工具可调用。
Greeting__invoke()

在 PHP 中利用高阶函数、回调和动态调度时,常日利用可调用工具。
它们供应了灵巧性,并支持函数和方法的动态调用,从而许可更动态和可重用的代码。

有什么差异?

在PHP中,“callable”和“closure”都与函数或方法的观点有关,但它们具有不同的含义和用法:

可调用:“可调用”是一个类型提示或类型声明,它指定函数或方法的参数或返回值必须是有效的函数或方法引用。
它是一个更广泛的术语,包含不同类型的可调用实体,包括常规函数、方法、闭包和实现方法的工具。
__invoke()

例如,当您利用须要可调用工具的参数定义函数时,这意味着您可以将任何有效的可调用工具作为参数通报给该函数:

function process(callable $callback) { // Perform some processing $callback();}function myFunction() { echo "This is a regular function.";}$myClosure = function() { echo "This is a closure.";};process('myFunction'); // Valid: Passing a regular functionprocess($myClosure); // Valid: Passing a closure

在此示例中,函数须要一个可调用的参数。
它可以接管常规函数 () 和闭包 (),由于两者都是可调用的。
process$callbackmyFunction$myClosure

2. 闭包:闭包是 PHP 中一种特定类型的可调用。
它是一个匿名函数,可以分配给变量或作为值通报。
闭包能够从其周围范围内“关闭”变量,纵然在外部函数完成实行后也能捕获和保留对这些变量的访问。

闭包是利用关键字创建的,无需指定名称,并且它们可以选择利用该关键字从周围范围捕获变量。
functionuse

$greeting = function ($name) { echo "Hello, $name!";};$greeting('John'); // Output: Hello, John!

在此示例中, 是一个闭包,它接管参数并回显问候语。
可以利用变量作为函数调用闭包。
$greeting$name

闭包供应了一种动态创建函数并更好地掌握变量范围的方法。
它们常日用作回调或用于实现高阶函数。

总而言之,“可调用”是一个类型提示或声明,将参数或返回值表示为函数或方法引用,而“闭包”特指可以从其周围范围捕获变量的匿名函数。
闭包是可调用工具的子集,但供应其他功能,例如变量封装。

标签:

相关文章

php监听global技巧_PHP多进程编程实例

以下代码段实现天生3个子(worker)进程,并对子(worker)进程运行状态进行监听与非常捕捉,可进行完善补充,以用于行列步队...

PHP教程 2024-12-13 阅读0 评论0