有时我们需要在代码中使用预先定义好的常量,
例如当前时间戳,由于代码封装了许多层,每次都用Carbon::now()获取当前时间有可能时间会一致。
这里有一个很简单的小技巧
话不多说上代码
新建存放变量的类
namespace App\Light\Box;class BoxContainer{//全局时间戳const NOW = 'NOW';//保存变量键值对public $mountData = [];/*** 挂载变量* @param $key //键* @param $value //值*/public function mount($key, $value){//没有赋值,则赋值if (!isset($this->mount[$key])) {$this->mountData[$key] = $value;}}/*** 获取指定变量* @param $key* @return mixed|string*/public function get($key){return isset($this->mountData[$key]) ? $this->mountData[$key] : '';}}
创建门面类
namespace App\Light\Box;use Illuminate\Support\Facades\Facade;/*** 让IDE有语法提示* @method static \App\Light\Box\BoxContainer mount($key, $value, $force = false)* @method static \App\Light\Box\BoxContainer unmount($key)* @method static \App\Light\Box\BoxContainer get($key)*/class Box extends Facade{protected static function getFacadeAccessor(){return 'BoxContainer';}}
创建服务提供者
namespace App\Light\Box;use Illuminate\Support\ServiceProvider;use Illuminate\Support\Carbon;class BoxServiceProvider extends ServiceProvider{public function register(){//绑定单例$this->app->singleton('BoxContainer', function () {return new BoxContainer();});//初始化变量Box::mount(BoxContainer::NOW,Carbon::now());}}
注册服务提供者
将以下代码加入config/app.php中
//注册变量容器服务提供者App\Light\Box\BoxServiceProvider::class,
现在可以在项目中肆意使用了
dump(Box::get(BoxContainer::NOW));
