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对象中执行匿名函数的那一行,对吗?