可以在没有任何特定名称的情况下创建并用作 PHP 脚本中的输入参数的函数,称为匿名函数。这些功能是使用 Closure 类实现的。将匿名函数分配给变量的过程与任何其他分配语法相同。通过将变量从父作用域传递到 use 语言构造,子作用域中的匿名函数可以继承该变量。
广告 该类别中的热门课程 PHP 开发人员 - 专业化 | 8 门课程系列 | 3次模拟测试开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
语法:
匿名函数不带有任何名称:
function($arg1,$arg2,….,$argN){ //The definition for the anonymous function };
使用匿名函数开发有效的 PHP 编码可以实现多种目标。匿名函数根据使用该函数的不同类型的用例表现出不同的功能。
下面给出了五个主要用例:
匿名函数可用于为变量赋值。它遵循与其他赋值操作相同的语法。
示例:
下面的代码片段用于将给定的输入值分配给输出值,并使用输出变量打印该值。
代码:
<?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); ?>
输出:
通过匿名函数调用打印给定的字符串和整数类型的输入值,如下所示:
定义匿名函数的特性对于创建内联回调函数起着重要作用。
在这种情况下,匿名函数可以作为输入参数传递给另一个函数。
下面的代码用于定义回调函数 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 脚本时,会触发回调函数,并且匿名函数的输出将打印在输出窗口上,如下所示:
匿名函数可用于从父作用域继承变量。
此用例不支持超级全局变量、$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 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”的对象的转储信息打印在输出窗口上,如下所示:
在创建对象时,如果从同一对象的范围实例化闭包并注册,它将创建一个循环引用,从而防止立即销毁该对象。应用静态匿名函数可以使脚本克服延迟。
下面的例子演示了常规匿名函数和静态匿名函数的使用对比分析。
示例:
情况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"; ?>
输出:
情况 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中文网其他相关文章!