Laravel 源码环境检测类详细分析
前言 单纯为了学习
Illuminate\Foundation\EnvironmentDetector分析
<?php
namespace Illuminate\Foundation;
use Closure;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
class EnvironmentDetector
{
//主要对外方法
public function detect(Closure $callback, $consoleArgs = null)
{
//如果有cli参数
if ($consoleArgs) {、
//执行检测控制台环境
return $this->detectConsoleEnvironment($callback, $consoleArgs);
}
//执行检测web环境
return $this->detectWebEnvironment($callback);
}
//直接执行闭包
protected function detectWebEnvironment(Closure $callback)
{
return call_user_func($callback);
}
protected function detectConsoleEnvironment(Closure $callback, array $args)
{
//检查是否通过控制台传参
if (! is_null($value = $this->getEnvironmentArgument($args))) {
return head(array_slice(explode('=', $value), 1));//截取第一个参数
}
//否则直接执行
return $this->detectWebEnvironment($callback);
}
//获取参数
protected function getEnvironmentArgument(array $args)
{
return Arr::first($args, function ($value) {
return Str::startsWith($value, '--env');
});
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接