Laravel: facade在调用方法的时候会创建新的对象吗?


Laravel: do facades actually create new objects on calling methods?

我有一个通常通过

绑定的演示类
$this->app->bind('demo', function(){返回新的demo ();} 之前

设置门面

受保护静态函数getFacadeAccessor(){返回'demo';} 之前

类本身看起来像这样

<>以前课堂演示{私人value1美元;私人value2美元;setVal1($value){$this->value1 = $value;}setVal2($value){$this->value2 = $value;}getVals(){返回'Val 1: '。$this->value1 . 'Val 2: '。$ this -> value2;}} 之前

我被告知,如果我在这个类上使用facade, Laravel将实例化类的一个对象,然后调用该对象的方法,如:

$app->make['demo']->setVal1();     

但我测试了更多,发现这个非常奇怪(至少对我来说)的行为:

<>之前如果我做演示::setVal1("13654");

和<>之前演示::setVal2(随机字符串)之前

我不应该能够使用Demo::getVals()来检索我刚刚创建的值,应该吗?因为每次使用facade方法时都会实例化一个新对象,一个对象如何检索另一个对象的属性?应该有三个不同的实例,但我仍然能够从其他实例中检索属性…

我认为这是唯一可能的,如果一个将绑定类与App::单例,而不是通过App::绑定?

Facade仍然只返回一个实例。但是,您可以从方法中使用new static返回类的新实例。

我在Laravel论坛上问过,nesl247给出了一个很好的解释。请在这里找到:http://laravel.io/forum/08 - 22 - 2014 -如何-我-实例化一个新的对象通过调用-类-方法-通过一个facade