我想知道什么时候应该使用PHP回调函数,使用PHP回调函数代替传统函数有什么好处?
例如
以小写形式获取名称的传统方法
<?php
function string($string){
$results = array(
'upper' => strtoupper($string),
'lower' => strtolower($string),
);
return $result;
}
$name = string('Ahmar');
echo $name; //Output: ahmar
?>
Run Code Online (Sandbox Code Playgroud)
使用回调获得相同的输出
<?php
function string($string, $callback){
$results = array(
'upper' => strtoupper($string),
'lower' => strtolower($string)
);
if(is_callable($callback)){
call_user_func($calllback, $result);
}
}
string('Ahmar', function($name){
echo $name['lower']; //Output: ahmar
});
?>
Run Code Online (Sandbox Code Playgroud)
请解释一下使用闭包回调有什么好处,我们应该什么时候使用它?谢谢
PHP 中几乎没有用于在操作完成时调用的回调,例如:
string('Ahmar', function ($name) { echo ... })
Run Code Online (Sandbox Code Playgroud)
这在像 Javascript 这样的语言中是非常惯用的;但那是因为 Javascript 的执行模式与 PHP 完全不同。在 Javascript 中,许多事情通常会同时发生,要么在浏览器中由于交互式 UI,要么在服务器上由于许多并行请求。PHP虽然在单线程中以非交互方式运行,因此需要异步协调的并行任务并不多。PHP 中的并行执行发生在不同的 PHP 实例中,而不是在同一个 PHP 实例中。
在 Javascript 中,当后台发生的事情完成处理时,您需要回调来协调应该发生的事情:
foo(bar => {
// this happens after
});
// this happens before
Run Code Online (Sandbox Code Playgroud)
在 PHP 中,同样可以通过等待函数返回来实现:
// this happens before
$bar = foo();
// this happens after
Run Code Online (Sandbox Code Playgroud)
(请注意,当然也有例外;例如,在用 PHP 编写 Web 套接字服务器时,您将获得与在 node.js 中看到的相同的基于回调的架构。)
因此,在大多数情况下,当您不仅需要将值作为参数传递给算法,而且还需要将代码块作为参数传递时,您会使用回调。作为一个具体的例子,采取usort:
usort($foo, function ($a, $b) { return $a['bar'] - $b['bar']; });
Run Code Online (Sandbox Code Playgroud)
此回调与异步执行无关,而是用于将自定义排序逻辑传递给函数。
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |