草庐IT

Closures

全部标签

php - 没有识别变量的 Laravel Eloquent

我正在尝试使用laravel-eloquent获取特定日期之后的房间和他们的预订。$fdate='2015-01-05';$roomdata=Rooms::where('city_id','=',$citydata['id'])->with('types')->with('localities')->with('slideshow')->with(array('booking'=>function($query){$query->where('bookstart','>',$fdate);}))->get();这给我一个错误,说$fdate未定义。但是当我这样做的时候$query->w

php - __destruct() 和 __call() 创建无限循环

我大大简化了我的代码,但我正在做的是这样的:classApp{protected$apps=[];publicfunction__construct($name,$dependencies){$this->name=$name;$apps=[];foreach($dependenciesas$dependName){$apps[$name]=$dependName($this);//returnsaninstanceofApp}$this->apps=$apps;}publicfunction__destruct(){foreach($this->appsas$dep){$result

php - PHP 中的闭包或 create_function

我决定为我的回调使用闭包而不是create_function并且因此只支持PHP>5.3主要是因为增加了可调试性,也因为我假设(他们说的是什么假设?)在我的情况下,create_function的即时编译的开销可能会抵消任何额外的比较,而这些比较必须在函数中进行。这很可能仍然是这种情况(对于我的应用程序)并且需要进一步测试,但我对这个(非常)简单测试的输出很感兴趣,它显示了create_function方法更当它只能删除四个条件(和连接)时,比闭包快两倍。显然,在我的测试用例中没有进行额外的处理,这是大部分速度获得或损失的地方,但在你没有额外处理但有很多条件(可以删除)和回调被调用了足

php - 如何序列化在属性内部有闭包的对象?

如果我执行serialize($obj),我得到:Serializationof'Closure'isnotallowed有什么方法可以在序列化时忽略这些闭包吗?无论如何,当我反序列化字符串时我不需要它们(这些属性的值可以是null或其他)。我的类(class)看起来像这样:ClassNode{protected$attrs=array();}$attrs是一个关联数组,可以包含一些闭包元素,比如$attrs['validator']=function(){...} 最佳答案 很简单:你不能。闭包不可序列化。如果你想创建“类似的东西

PHP5.3 在 VIM 中关闭缩进

我尝试了几种不同的php缩进脚本,但它们无法处理以下代码的缩进:myfunc(function(){echo"hello";if(1==2){echo"world";}});你能指出vimrc设置或vim的php缩进文件来处理PHP5.3的新语法吗?更新:这是我得到的:myfunc(function(){echo"hello";if(1==2){echo"world";}});我使用来自http://www.2072productions.com/vim/indent/php.vim的7.3的捆绑缩进约翰·威尔斯剩余的PHP语法正确缩进。 最佳答案

php - PHP 5.3 和 5.4 之间的闭包有什么区别?

我在本地运行PHP5.3.15(在OSX上自定义apache/php/mysql堆栈),并且有以下代码,工作正常:$my_closure=function($something,$other)use(&$foo,$bar){//watchadoin'?...stuff.};$my_closure('hello',array('one','two'));一位同事将MAMP与PHP5.4.x结合使用,并在闭包调用($my_closure(...);)中收到“函数名称必须是字符串”错误。我可以使用call_user_func()或call_user_func_array()解决这个问题,但我

php - PHP 中的非匿名函数可以使用 'use' 关键字吗?

PHP中的非匿名函数可以使用“use”关键字吗?或者它仅适用于匿名函数。我可以这样写一个php文件吗//L.php//assume$_textsisinthiscontext..$_language=null;functionL_init($language)use(&$_language){$_language=$language;}functionL($key)use($_texts,$_language){$_texts[$_language][$key];}所以,另一个文件可以像这样使用它//client.phprequire_once'L.php';L_init('en');

php - 调用直接分配给对象属性的闭包

我希望能够直接调用我分配给对象属性的闭包,而无需将闭包重新分配给变量然后再调用它。这可能吗?下面的代码不起作用并导致fatalerror:调用未定义的方法stdClass::callback()。$obj=newstdClass();$obj->callback=function(){print"HelloWorld!";};$obj->callback(); 最佳答案 从PHP7开始,你可以这样做$obj=newStdClass;$obj->fn=function($arg){return"Hello$arg";};echo($o

php - 为什么我不能在非匿名函数中使用 'use'?

我正在尝试从父子元素数组创建路径。我们的想法是编写一个递归函数,它按顺序用路径包含的所有元素填充一个数组。我的问题是PHP中的闭包:为了让我的递归函数起作用,我必须在全局范围内定义几个变量。它是这样的:global$breadcrumbs;$breadcrumbs=array();functionbuildBreadcrumbs($elements,$parentID){global$siteroot;global$breadcrumbs;global$navigation;if($siteroot['id']===$parentID){$nav=array_values($navig

php - 闭包如何帮助创建 DSL/fluent 接口(interface) : PHP examples?

您能给我一个PHP示例,说明闭包如何有助于创建DSL(流畅的接口(interface))吗?编辑:以下问题中接受的答案讲述了嵌套闭包。如果有人可以将该示例翻译成PHP,那也会有所帮助:Experiencewithfluentinterfaces?Ineedyouropinion! 最佳答案 这是我能想到的第一个例子,它不是很好,但它给了你一个想法:$db=newDatabase();$filteredList=$db->select()->from('my_table')->where('id',9)->run()->filter(