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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!