Php 从闭包返回一个值到main方法
我的结论如下:Php 从闭包返回一个值到main方法,php,closures,Php,Closures,我的结论如下: public function create(){ DB::transaction(function(){ return 'function called' }); 如何从create返回“function called”?您可以将此值分配给主方法的变量: public function create(){ $var = null; DB::transaction(function() use (& $var){ $var=
public function create(){
DB::transaction(function(){
return 'function called'
});
如何从
create
返回“function called”?您可以将此值分配给主方法的变量:
public function create(){
$var = null;
DB::transaction(function() use (& $var){
$var= 'function called';
return $var;
});
return $var;
}
这取决于关闭的实施情况 举个简单的例子:
function transaction($inReturnable, $returnable)
{
$inReturnable();
return $returnable();
}
$value = transaction(function() {
return 'hello!';
}, function() {
return 'yello!';
});
echo $value;
// Output: yello!
那么,这有什么用处呢 --当您希望在不影响对象上下文的情况下,为对象的客户端用户提供使用某些对象方法或属性的权限时,您需要方法返回其他内容,同时您需要为用户提供在对象/方法内执行操作的访问权,可以说,这是一种依赖注入
function transaction($inReturnable, $returnable)
{
$privateVariable = 'Hello';
$inReturnable($privateVariable);
return $returnable();
}
$value = transaction(function($privateVariable) {
echo $privateVariable . "\n";
}, function() {
echo $privateVariable; // Notice: Undefined variable: privateVariable
return 'yello!';
});
echo $value;
// Output: Hello
Notice: Undefined variable: privateVariable
yello!
这类实现的实例是
php
:
成功时返回TRUE,失败时返回FALSE
:
在应用后返回包含array1的所有元素的数组
将回调函数分配给每个函数
这有点像:下面只是一个伪代码
例如:
$array = [1,2,3];
$map = array_map(function($value) {return $value * 3;}, $array);
print_r($map);
$walk = array_walk($array, function($value, $key) {return $value * 3;});
// will return true
print_r($walk);
array_walk($array, function($value, $key) use (&$array) {return $array[$key] = $value * 3;});
print_r($array);
这将输出:
Array ( [0] => 3 [1] => 6 [2] => 9 )
1
Array ( [0] => 3 [1] => 6 [2] => 9 )
例如:要从回调内部获取值,可以通过引用将变量传递给回调,然后从闭包内部编辑其值,然后在闭包外部使用此变量,如下所示:
DB::transaction(function() use (&$return) {
$return = 'some value!';
});
echo $return;
结论:-
这取决于函数/方法的实现。是否可以执行类似于
return DB::transaction()
的操作?@Mehrdad是的,只需在代码中的DB
之前添加return
。这个答案也适用。罗马的两种方法。这取决于方法DB::transaction()
是如何实现的。如果它返回闭包的返回值,那么它将工作。这不会工作,除非您通过引用传递$var
变量。@OscarPérez我认为您的函数实现可能不会工作,use
关键字将通过值传递$var
,因此,在闭包上下文之外,这是不可编辑的。
DB::transaction(function() use (&$return) {
$return = 'some value!';
});
echo $return;