Php 在使用生成器模式时,如何允许唯一的Laravel Facade实例?
我正在使用生成器模式,但调用之间会出现数据混淆。我希望在对facade的每次静态调用中都有一个新实例。例如: 底层类 试验 由于正面保持相同的实例,第二个测试行将打印Php 在使用生成器模式时,如何允许唯一的Laravel Facade实例?,php,laravel,facade,Php,Laravel,Facade,我正在使用生成器模式,但调用之间会出现数据混淆。我希望在对facade的每次静态调用中都有一个新实例。例如: 底层类 试验 由于正面保持相同的实例,第二个测试行将打印10。我想在这里输入'NO_-SUCH_-KEY'-在每次静态调用之后都有一个新实例。我该怎么做?我尝试使facade返回一个最小的“工厂”,即一个返回新的PHPFile实例的构造函数,但没有成功。我还读到,我应该在“结束”方法(sum/get)中调用一个新的static,但不确定如何执行该操作并保留累积的数据。添加工厂 此工厂将使
10
。我想在这里输入'NO_-SUCH_-KEY'-在每次静态调用之后都有一个新实例。我该怎么做?我尝试使facade返回一个最小的“工厂”,即一个返回新的PHPFile
实例的构造函数,但没有成功。我还读到,我应该在“结束”方法(sum/get)中调用一个新的static
,但不确定如何执行该操作并保留累积的数据。添加工厂
此工厂将使用magic\uu call
方法拦截任何调用,然后将其分派到新的PHPFile(我的生成器类)
感谢@apokryfos,他指出我需要返回其他东西——不是构建器本身,而是另一个类。为什么不将其作为
PHPFile
逻辑的一部分(创建新实例等等)。。。?似乎它应该有这样的责任感我想使用构建器模式启用静态可链接API我认为你不能,而且我认为你不应该。请为您的问题找到不同的解决方案。立面的主要用途是环绕单身人士。也就是说,如果您只想重置外观,您只需执行PHPFile::swap(app()->make('PHPFile'))
Ok,谢谢!刚刚更新了问题以澄清目的。这与Laravels QueryBuilder非常相似,所以确实应该有一些方法来实现它?我从未遇到过查询冲突?DB
facade是的facade,而不是查询生成器。数据库管理器单例负责返回查询生成器实例。这意味着查询之间没有冲突,因为这不是facade单例
<?php
namespace Me\Package;
class PHPFile
{
public function set($key, $value) {
$this->$key = $value;
return $this;
}
public function get($key) {
return isset($this->$key) ? $this->key : 'NO_SUCH_KEY';
}
public function sum()
{
// example of an "ending" method
}
}
<?php
namespace Me\Package\Facades;
use Illuminate\Support\Facades\Facade;
class PHPFile extends Facade {
protected static function getFacadeAccessor() { return 'PHPFile'; }
}
use Me\Package\PHPFile;
public function register()
{
App::bind('PHPFile',function() {
return new PHPFile;
});
}
print PHPFile::set('first', 10)->set('second', 20)->sum();
// 30
print PHPFile::get('first');
// 10 !!!
<?php
namespace Me\Package\Factories;
use Me\Package\PHPFile;
class PHPFileFactory
{
public function __call($method, $args)
{
return (new PHPFile)->$method(...$args);
}
}
App::bind('PHPFile',function() {
return new PHPFileFactory;
});