У меня есть демо-класс, обычно связанный через
$ this-> app-> bind ('demo', function () {return new Demo ();}
Устанавливать фасад
защищенная статическая функция getFacadeAccessor () {return 'demo'; }
Сам класс выглядит так
класс Demo { private $ value1; private $ value2; public function setVal1 (значение $) { $ this-> value1 = $ value; } public function setVal2 (значение $) { $ this-> value2 = $ value; } публичная функция getVals () { return 'Val 1:'. $ this-> value1. «Вал 2:». $ This-> значение2; } }
Мне сказали, что если я буду использовать фасад в этом классе, Laravel создаст объект класса, а затем вызовет метод на этом объекте, например:
$app->make['demo']->setVal1();
Butt Я проверил еще несколько и нашел это очень странное (по крайней мере для меня) поведение:
Если я сделаю
Demo :: setVal1 ( '13654');
а также
Демо :: setVal2 («случайная строка»)
Я не должен использовать Demo :: getVals () для извлечения значений, которые я только что создал, должен ли я? Поскольку каждый раз, когда используется метод фасада, создается экземпляр нового объекта и как один объект может извлекать свойства другого объекта? Там должно быть три разных экземпляра, но все же я могу получить свойства из этих других экземпляров …
Я думал, что это возможно только в том случае, если бы связать класс с App :: singleton, а не через App :: bind?
Фасад по-прежнему просто возвращает один экземпляр. Однако вы можете возвращать новые экземпляры класса, используя new static
метод.
Я спросил на форуме Laravel, и nesl247 дал довольно хорошее объяснение. Его можно найти здесь: http://laravel.io/forum/08-22-2014-how-do-instantiate-a-new-object-by-calling-a-class-method-via-a-facade