前言 單純為了學習
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 協議》,轉載必須註明作者和本文連結