首页  >  文章  >  后端开发  >  PHP 匿名函数

PHP 匿名函数

王林
王林原创
2024-08-29 12:47:23553浏览

可以在没有任何特定名称的情况下创建并用作 PHP 脚本中的输入参数的函数,称为匿名函数。这些功能是使用 Closure 类实现的。将匿名函数分配给变量的过程与任何其他分配语法相同。通过将变量从父作用域传递到 use 语言构造,子作用域中的匿名函数可以继承该变量。

广告 该类别中的热门课程 PHP 开发人员 - 专业化 | 8 门课程系列 | 3次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

语法:

匿名函数不带有任何名称:

function($arg1,$arg2,….,$argN){
//The definition for the anonymous function
};

不同类型的用例

使用匿名函数开发有效的 PHP 编码可以实现多种目标。匿名函数根据使用该函数的不同类型的用例表现出不同的功能。

下面给出了五个主要用例:

1.用例 1

匿名函数可用于为变量赋值。它遵循与其他赋值操作相同的语法。

示例

下面的代码片段用于将给定的输入值分配给输出值,并使用输出变量打印该值。

代码:

<?php
$Var = function($value) //Anonymous function is used to assign value to variable $Var
{
//Anonymous function definition
printf("The assigned value is: %s\r\n", $value);
};
//Calling the anonymous function using the assigning variable $Var with a string value input
$Var('A string value is assigned');
//Calling the anonymous function using the assigning variable $Var with a integer value input
$Var(35);
?>

输出:

通过匿名函数调用打印给定的字符串和整数类型的输入值,如下所示:

PHP 匿名函数

2.用例 2

定义匿名函数的特性对于创建内联回调函数起着重要作用。

在这种情况下,匿名函数可以作为输入参数传递给另一个函数。

下面的代码用于定义回调函数 preg_replace_callback。

将匿名函数作为其输入参数之一。

代码:

<?php
//creating callback function using PHP anonymous function
// preg_replace_callback is the calling function
echo preg_replace_callback('~-([a-z])~', function ($input) {
//Anonymous function definition
return strtoupper($input[1]);
}, 'This is an anonymous callback function!');//End of the definition of the callback function
?>

输出:

执行 PHP 脚本时,会触发回调函数,并且匿名函数的输出将打印在输出窗口上,如下所示:

PHP 匿名函数

3.用例 3

匿名函数可用于从父作用域继承变量。

此用例不支持超级全局变量、$this 变量或任何同名参数变量。

示例

代码:

<?php
$input_text = 'Initial message';
$outputVar = function () {
//Anonymous function definition
var_dump($input_text);
};
$outputVar();
// Inherit the variable $input_text by value
$outputVar = function () use ($input_text) {
var_dump($input_text);
};
$outputVar();
// Inherit the variable $input_text by-reference
$outputVar = function () use (&$input_text) {
var_dump($input_text);
};
$outputVar();
// Modifying the variable value of parent scope from the function call
$input_text = ' Next message';
$outputVar();
// Inserting regular argument along with parent scope variable
$outputVar = function ($arg) use ($input_text) {
var_dump($arg . ' ' . $input_text);
};
$outputVar("Random message");
?>

输出:

上述代码的结果输出如下所示:

PHP 匿名函数

4.用例 4

从 PHP 5.4 版本开始,声明任何类时,该类默认绑定匿名函数功能。这使得变量“$this”在类中定义的任何匿名函数的范围内可用。

示例

代码:

<?php
class AnonymousClass
{
public function Classfunction()
{
return function() {
var_dump($this); //Retrieves the dump information of class object using $this variable,once //it is created
};
}
}
$Classobject = new AnonymousClass;
$function = $Classobject->Classfunction();
$function();
?>

输出:

来自类“AnonymousClass”的对象的转储信息打印在输出窗口上,如下所示:

PHP 匿名函数

5.用例 5

在创建对象时,如果从同一对象的范围实例化闭包并注册,它将创建一个循环引用,从而防止立即销毁该对象。应用静态匿名函数可以使脚本克服延迟。

下面的例子演示了常规匿名函数和静态匿名函数的使用对比分析。

示例:

情况1:不使用静态匿名函数

代码:

<?php
class TrialClass
{
private $AnonymousVar;
public function __construct()
{
$this->AnonymousVar = function () {
};
}
public function __destruct()
{
echo "Destruction function is called";
}
}
new TrialClass;
echo "After the object is being defined";
echo "\n";
?>

输出:

PHP 匿名函数

情况 2:包含静态匿名函数

代码:

<?php
class TrialClass
{
private $AnonymousVar;
public function __construct()
{
$this->closure = self::createClosure();
}
public static function createClosure()
{
return function () {
};
}
public function __destruct()
{
echo "Destruction function is called";
}
}
new TrialClass;
echo "\n";
echo "\n";
echo "After the object is being defined";
echo "\n";
echo "\n";
?>

输出:

PHP 匿名函数

补充说明

  • 自动将当前类绑定到匿名函数是 PHP 5.4 版及以上版本的默认行为。这可以通过实现静态匿名函数来禁止。
  • 它增强了性能,因为它可用于定义仅使用一次的函数。匿名函数仅适用于需要从该函数执行的作业,并且不适用于其余代码。
  • 当使用匿名函数为变量赋值时,PHP 会自动将表达式转换为 Closure 内部类实例。

以上是PHP 匿名函数的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:Date Function in PHP下一篇:Calendar in PHP