Laravel 原始碼環境檢測類詳細分析

chonghua_123發表於2018-12-15

前言 單純為了學習

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 協議》,轉載必須註明作者和本文連結

相關文章