首页 >

Laravel5 源码解析 (一)

后端开发|php教程Laravel5 源码解析 (一)
Application,Illuminate,Container,Foundation,HttpKernelInterf
后端开发-php教程
Laravel5 源码解析
o2o兼职源码,银河麒麟安装vscode,安装ubuntu rst,tomcat端口全部占用,安卓电话本案例sqlite,爬虫 if,php中的数组函数,杭州seo哪家效果好,网站全套源码下载,div css博客模板 兼容lzw
autoload.php 用的是composer的autoload
自适应下载单页源码,ubuntu修改开机日志,爬虫 数据量,rap php,seo暴力赚钱lzw
这里就不做说明了
php在线订餐系统 源码,Ubuntu分屏出问题,tomcat7修改为8,网络爬虫指的是python,php删除中文字符,宝鸡seo公lzw
app.php 启动整个项目

首先看下Application这个类

class Application extends Container implements ApplicationContract, HttpKernelInterface
Container中方法很多,实现了ArrayAccess,主要方法都是是用于绑定对象的(利于重用)。
ApplicationContract 需要实现注册service provider。
HttpKernelInterface 就一个handle方法,接受一个Request, 返回一个Response。

Application的构造方法

registerBaseBindings()
把app对象自身绑定到instance属性数组。

registerBaseServiceProviders()
注册两个service provider, 一个是EventServiceProvider,注册一个单例Dispatcher,名字为’events’(TODO),另一个是RoutingServiceProvider(), 包含了Router, RouterGenerator, Redirector, ResponseFactory, 构造ResponseFactory接受两个参数,一个是ViewFactory,一个是Redirecer

registerCoreContainerAliases(), 把一系列key和对应的类名,接口名加入alias属性数组
'app' => ['Illuminate\Foundation\Application', 'Illuminate\Contracts\Container\Container', 'Illuminate\Contracts\Foundation\Application']
‘app’是key, 数组中的三个是别名(猜测:估计是每当用app?>make(′Illuminate\Foundation\Application′),都会返回app->make(‘Illuminate\Foundation\Application’),都会返回app[‘app’])

构造完App后开始创建重要的instance

在app容器中共享一个App\Http\Kernel单例。
看一下这个类,继承了一个Illuminate\Foundation\Http\Kernel,实现了bootstrap, handle, terminate, getApplication这四个方法,可以想象,当收到request时候,流程就是前三个依次执行,非常简化。
protected $bootstrappers数组,包含了bootstrap的一系列启动项目。
他的__construct接受两个参数,一个Application,一个Router。需要再看一下$app->singleton是如何初始化他的,莫非已经包含了IoC的功能?(TODO)
这里先假设这两个参数已经被正确传入了。接着,立即把protected $routeMiddleware中的给router的middleware方法调用。middleware方法只是把key和Class名称加入到router的middleware属性数组中。

在app容器中共享一个App\Console\Kernel单例。
继承自Illuminate\Foundation\Console\Kernal。他的构造方法接受一个app,一个Dispatcherapp,一个Dispatcher event。并且设置了一个scheduler,用于每隔一个时间段执行任务。protected $commands属性和protected function schedule方法都是用来重写的。

在app容器中共享一个App\Exceptions\Handler单例。
继承自Illuminate\Foundation\Exceptions\Handler。他的构造方法接受一格Psr\Log\LoggerInterface

至此,app算是构造完成。接下来就要调用他的方法了。

调用Application

这里的代码非常明确,首先make一个Kernal,之前已经将其绑定为singleton了。然后kernal handle一个request, 得到一个response, response调用send方法,最后kernal terminate。这里只是一个高纬度的概括,具体其中实现的方法,还需要进一步深入。

看到这里,我的感觉是,整个项目最重要的部分就是$app这个容器,或者说Container这个类,绑定的是什么(Closure),有哪些绑定方法,各个方法的作用是什么,make 和 build有什么区别,alias的作用是什么,等。了解了这些,对写框架会有帮助。

$(function () {$(‘pre.prettyprint code’).each(function () { var lines = $(this).text().split(‘\n’).length; var $numbering = $(”).addClass(‘pre-numbering’).hide(); $(this).addClass(‘has-numbering’).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('').text(i)); }; $numbering.fadeIn(1700);}); });

以上就介绍了Laravel5 源码解析 (一),包括了方面的内容,希望对PHP教学有兴趣的朋友有所帮助。


Laravel5 源码解析 (一)
  • 关于php的api,该如何处理
  • 关于php的api,该如何处理 | 关于php的api,该如何处理 ...

    Laravel5 源码解析 (一)
  • javascript - foundation6弹出窗口的数据传输
  • javascript - foundation6弹出窗口的数据传输 | javascript - foundation6弹出窗口的数据传输 ...

    Laravel5 源码解析 (一)
  • zend framework多模块多布局配置
  • zend framework多模块多布局配置 | zend framework多模块多布局配置 ...