php – Laravel:外观实际上是在调用方法上创建新对象吗?

我有一个通常绑定的演示类

$this->app->bind('demo', function() { return new Demo(); }

一个立面

protected static function getFacadeAccessor() { return 'demo'; }

该类本身看起来像这样

class Demo 
    {

        private $value1;        
        private $value2;        

        public function setVal1($value)
        {
            $this->value1 = $value;
        }

        public function setVal2($value)
        {
            $this->value2 = $value;
        }

        public function getVals()
        {
            return 'Val 1: ' . $this->value1 . ' Val 2: ' . $this->value2;
        }   

    }

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

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

我试了一下,发现这个非常奇怪(至少对我而言)的行为:

如果我做

Demo::setVal1('13654');

 和

Demo::setVal2('random string')

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

我认为这只有在用App :: singleton而不是App :: bind绑定类时才有可能吗?

解决方法:

Facade仍然只返回一个实例.
但是,您可以使用方法中的新静态返回类的新实例.

我在Laravel论坛上问道,nesl247做了很好的解释.
请在这里找到:
http://laravel.io/forum/08-22-2014-how-do-i-instantiate-a-new-object-by-calling-a-class-method-via-a-facade

上一篇:Laravel源码(4):Facade是个啥?


下一篇:设计模式 --外观模式(Facade)