【PHP闭包实战案例使用分析】教程文章相关的互联网学习教程文章

php – 在封装PDO事务时使用闭包不起作用.为什么?【代码】

我目前在封装PDO事务方面存在问题,易于使用;执行事务后,没有发生数据库更改!我的想法是只提供在PDO事务中执行所需的参数和可调用事务.受保护的executeTransaction方法定义PDO事务的封装,如下所示.客户端方法是getNextWidWithLock,它使用executeTransaction方法.我试图将交易从关闭中移出来并且有效!可能是为什么它似乎没有将更改提交到数据库的原因.class ParentRepository{ .../*** Executes a transaction with logging. * @pa...

php – 类中的闭包数组【代码】

看来你不能在类的范围内定义一组可调用方法.为什么不? 为什么这是有效的PHP(见http://3v4l.org/1JeQr)$methods = array(1 => function($subject, $value){return ($subject == $value);} );var_dump($methods[1]('a', 'a'));但不是这个(见http://3v4l.org/FL449)class Foo {public static $methods = array(1 => function($subject, $value){return ($subject == $value);}); }var_dump(Foo::$methods[1]('a', 'a'));解决方法:因为...

php – 调用闭包时的奇怪行为【代码】

我想知道为什么这不起作用:(PHP致命错误:调用未定义的方法stdClass :: y())$x=new stdClass; $x->y=function(){return 'hi';}; echo $x->y();但这有效:$x=new stdClass; $x->y=function(){return 'hi';}; $y=$x->y; echo $y();echo($x-> y)();还返回Parse错误:语法错误,意外(‘,期待’,’或’;’无效.那么,在没有中间变量的情况下调用y闭包属性的正确方法是什么.解决方法:因为在PHP中,类可以具有函数和属性,并且函数和属性可以...

php – 从闭包内调用当前闭包【代码】

在javascript中,你可以做这样的事情arr.map(function(val) {return typeof val == 'array' ? val.map(arguments.callee) : val.doSomething(); });这将通过arr递归迭代并将doSomething应用于每个值. 在PHP中是否有与JavaScript的arguments.callee相同的东西?解决方法:Is there an equivalent to JavaScript’s arguments.callee in PHP?您必须将该功能传递给自己:$func = function($a = 0) use (&$func) {echo "$a\n";if ($a == ...

php – Lumen 5.3未定义变量:闭包【代码】

来自作曲家我从laravel / lumen创建了一个项目.我没有评论路由中间件$app->routeMiddleware(['auth' => App\Http\Middleware\Authenticate::class, ]);` 我的路线添加了auth中间件.$app->get('/', ['middleware'=>'auth'], function () use ($app) {return $app->version(); });我在RoutesRequests.php第656行中得到ErrorException:未定义的变量:closure 我用谷歌搜索了这个接缝是5.2中的一个问题,但我已经下载了5.3.没有中间件我...

php – 无法调用包含在闭包中的闭包?【代码】

如果我在另一个闭包中包装一个闭包,我就不能调用嵌套闭包.为什么不?我认为一个例子最能说明问题. 这个PHP代码:function FInvoke($func) {$func(); }FInvoke(function () { echo "Direct Invoke Worked\n"; });按预期工作并打印“直接调用工作”. 但是,如果我稍微修改它以添加另一级别的间接,它将失败:function FInvoke($func) {$func(); }function FIndirectInvoke($func) {FInvoke(function () {$func();}); }FIndirectInvoke(...

php – 使类的静态成员函数(闭包)不起作用【代码】

(PHP7)请考虑以下代码,它尝试将函数分配给变量,然后确保仅调用一次.class a{static public $b;static public function init(){self::$b();self::$b=function(){};} } a::$b=function(){echo 'Here I do very heavy stuff, but will happen only in the first time I call init()';};for($i=0;$i<1000;$i++){a::init(); }在php7中,它会给出一个错误,它希望:: $b是一个字符串(要调用的函数名).如果我使用纯变量而不是静态成员,它将起...

php – 带闭包的laravel查询【代码】

我正在尝试查询数据库并在闭包函数中创建一个过滤器,我的模型(简体)如下所示:Products:id,sale_idSales:id,provider_idProvider:id我想要来自特定提供商的所有产品,所以我构建了我的查询:Product::with(array('sale'=>function($query){$query->where('provider_id', '=', 1);}))->get();问题是结果包含销售的正确产品,以及销售空的错误产品,如下所示:[{"id": 25,"sale": null }, {"id": 26,"sale": {"id": 15,"provider_id": 3...

PHP闭包和匿名函数

概念闭包和匿名函数在PHP5.3.0中被引入。 闭包闭包是指创建时封装周围环境的函数。即使闭包所在的环境不存在了,闭包中封装的状态依然存在。这个概念很难理解,不过没关系,继续看下去就会明白了。 匿名函数匿名函数就是没有名字的函数。匿名函数可以赋值给变量,还能像其他任何PHP对象那样传递。不过匿名函数仍然是函数,因此可以调用,可以传递参数。匿名函数特别适合作为函数或者方法的回调。注意:理论上来说,闭包和匿名函数是...

php – 如何访问方法闭包内的全局对象【代码】

我目前有一个依赖注入模块,它允许我创建一个对象工厂:class DiModule {private $Callbacks;public function set($foo,$bar) {$this->Callbacks[$foo] = $bar;}public function get($foo) {return $this->Callbacks[$foo];} }然后我有一个事件对象,它存储方法闭包和将触发事件的会话.class Event {private $Sesh;private $Method;public function set($sesh = array(),$method) {$this->Sesh = $sesh;$this->Method = $method;}pub...

PHP 闭包【代码】

一、概述 闭包是指在创建时封装周围状态的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在。闭包对象实现了__invoke()魔术方法,只要变量名后有(),PHP就会查找并调用__invoke方法。 1、闭包可以赋值给变量2、闭包可以作为参数(回调函数)传递给函数3、闭包可以作为函数的返回值4、定义一个闭包函数,即产生了一个闭包类(Closure)的对象 Closure { /* 方法 */ __construct ( void ) public static Clos...

PHP匿名函数和闭包【图】

概述 闭包和匿名函数在PHP 5.3.0中引入,这两个特性非常有用,每个PHP开发者都应该掌握。 匿名函数其实就是没有名称的函数,匿名函数可以赋值给变量,还能像其他任何PHP函数对象那样传递。不过匿名函数仍然是函数,因此可以调用,还可以传入参数,适合作为函数或方法的回调。 闭包是指在创建时封装周围状态的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在。 创建匿名函数 创建匿名函数很简单: //将匿名函数赋给一...

PHP 闭包【代码】

一、闭包基本用法闭包(Closure)又叫做匿名函数,也就是没有定义名字的函数。比如下面的例子:// 定义一个闭包,并把它赋给变量 $f $f = function () {return 7; }// 使用闭包也很简单 $f(); //这样就调用了闭包,输出 7// 当然更多的时候是把闭包作为参数(回调函数)传递给函数 function testClosure (Closure $callback) {return $callback(); }// $f 作为参数传递给函数 testClosure,如果是普遍函数是没有办法作为testClosure的...