Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这次关闭有什么问题?_Php_Phalcon - Fatal编程技术网

Php 这次关闭有什么问题?

Php 这次关闭有什么问题?,php,phalcon,Php,Phalcon,我有下一个代码片段: $di = new FactoryDefault(); ... $di->setShared('mongo', function($di) use ($di) { return new Models\MongoDb\Manager($di); }); 代码运行良好,但PHP日志显示: Warning: Missing argument 1 for {closure}() in /var/www/merkaz.gq/public_html/v1/index.p

我有下一个代码片段:

$di = new FactoryDefault();
...
$di->setShared('mongo', function($di) use ($di) {
   return new Models\MongoDb\Manager($di);
});
代码运行良好,但PHP日志显示:

Warning:  Missing argument 1 for {closure}() in
/var/www/merkaz.gq/public_html/v1/index.php on line 63

有什么想法吗?

因为您的clousure不是用
$di
参数调用的。改变

function($di) use ($di) {


因为clousure不是用
$di
参数调用的。改变

function($di) use ($di) {


在Phalcon 2.1中,您可以使用:

$di->setShared('mongo', function() {
   return new Models\MongoDb\Manager($this);
});

在Phalcon 2.1中,您可以使用:

$di->setShared('mongo', function() {
   return new Models\MongoDb\Manager($this);
});

不是真的;由于闭包需要一个参数,然后在没有参数的情况下被调用,我认为“缺少参数”错误是适当的-php认为:“可能是谁调用闭包的错误”@Federico在我看来似乎闭包不需要参数,但提供了一个。@Mike你误解了参数的位置。“Function($di)”是函数的签名,它表示必须提供一个参数。该上下文中的名称“$di”将与函数定义中的同名变量匹配。该$di与您的$di对象完全没有关系。正如任何fn签名参数名称在其定义之外都是无关的。不过,“use($di)”确实指向闭包(函数)之外的范围。返回签名:这里的参数由调用函数提供!如果“setShared”不提供它,没有人会提供。所以,您可以使用“use”获取任何变量并将其放入闭包中。但是闭包函数参数,无论您如何调用它,都将由调用函数神奇地提供。例如,请参见'array_filter'@ButtleButkus,谢谢您的解释。我想我现在明白了。所以我可以想象,实际产生错误的那一行就是在FactoryDefault对象中执行匿名函数的那一行,对吧?不完全是;由于闭包需要一个参数,然后在没有参数的情况下被调用,我认为“缺少参数”错误是适当的-php认为:“可能是谁调用闭包的错误”@Federico在我看来似乎闭包不需要参数,但提供了一个。@Mike你误解了参数的位置。“Function($di)”是函数的签名,它表示必须提供一个参数。该上下文中的名称“$di”将与函数定义中的同名变量匹配。该$di与您的$di对象完全没有关系。正如任何fn签名参数名称在其定义之外都是无关的。不过,“use($di)”确实指向闭包(函数)之外的范围。返回签名:这里的参数由调用函数提供!如果“setShared”不提供它,没有人会提供。所以,您可以使用“use”获取任何变量并将其放入闭包中。但是闭包函数参数,无论您如何调用它,都将由调用函数神奇地提供。例如,请参见'array_filter'@ButtleButkus,谢谢您的解释。我想我现在明白了。所以我可以想象,实际产生错误的那一行就是在FactoryDefault对象中执行匿名函数的那一行,对吗?