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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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