Laravel5.1框架关键技术解析(读书笔记)
来源:互联网 发布:泸州大数据产业园 编辑:程序博客网 时间:2024/06/16 16:26
laravel框架,其本质也是由一堆出色的组件搭配而成,要了解laravel框架,那么就需要了解laravel框架中用到的各类组件。
php中各类组件库中,最为主要的为两个
Packagist
PEAR
其中,Packagist和Composer健米合作,利用Composer可以安装packagist里面的组件,并且完成自动加载。
利用composer将组件下载到本地之后,会生成composer.json和composer.lock两个文件,composer.lock文件会列出项目所有的php组件,以及组件的具体版本号,这样锁定了版本,让项目只能使用具体版本的PHP组件。这样的好处,composer会下载这个文件中列出的具体版本,而不管Packagist中可用的最新版本是多少,你应该把composer.lock文件纳入版本控制,这样让团队成员使用的PHP版本和你一样,如果本地开发和服务器使用php组件版本相同,可以尽量减少由于组件版本不同导致的bug。
composer的自动加载,其实就是名为autoload.php的文件,保存在vendor目录中,Composer下载各个PHP组件时,会检查每个组件的composer.json文件,确定如何加载该组件,得到这个信息后,Composer会在本地为该组件创建一个和服PSR标准的自动加载。这样我们就可以实例化项目中的任何PHP组件。这些组件需要自动加载。
现在我们开始,在本地构造出一个laravel框架。
首先,在本地新建一个composer.json,然后执行composer update,再添加我们的路由组件。illuminate\routing,illuminate\events ,新建我们的入口文件,在项目文件夹下面新建一个public文件夹,然后路由文件新建一个app文件夹,在app文件夹下面新建一个Http文件夹,在Http下建一个route.php文件。
在Laravel框架中,一些功能的生成都需要服务容器来实现,即Illuminate\Container\Contatiner类的实例,服务容器用于服务注册和解析,也就是说服务容器注册能够实现某些功能的实例或回调函数,当需要使用该功能时从服务容器中获取相应的实例来完成。
注册完路由之后,同意可以注册数据库组件Illuminate/database和视图组件Illuminate/view组件。
在加载视图组件的时候,使用setInstance()静态方法获取服务器实例的方法,关于静态方法,
参考 静态方法
声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问,但是静态方法可以。
友谊静态方法不需要通过对象既可以调用,所以伪变量$this在静态方法中不可用。
静态方法不可以由对象通过->操作符来访问。
用静态方法调用一个非静态防范会导致一个E_STRICT级别的错误。
就像其他所有的PHP变量一样,静态属性只能被初始化文字或常量,不能使用表达式。所以,可以把静态属性初始化为整数或者数组,但不能初始化为另外一个变量或者函数返回值,也不能指向一个对象。
<?php header("content-type:text/html;charset=utf-8");class Human{ static public $name = "妹子"; public $height = 180; public $age; //构造方法 public function __contruct() { $this->age = 18; //调用静态变量方法时,不会执行构造方法,只有实例化对象时,才会触发构造函数,输出一下内容 echo __FILE__,"<br />"; } static public function tell() { echo sel::$name;//静态方法调用静态属性,使用self关键词 //echo $this->height;//错,静态方法中不能调用非静态属性 //因为 $this 代表实例化对象,而这里是类,不知道$this 代表哪一个对象 } public function say() { echo self::$name."喜欢我"; //普通方法调用静态属性,同样使用self关键词 echo $this->height; }}$xiaoming = new Human();$xiaoming = say();$xiaoming = tell();//对象可以访问静态方法echo $xiaoming::name;//对象访问静态属性。不能这样访问$xiaoming->name//因为静态属性的内存位置不在对象里面Human::say();//错误,say()方法有$this时出错,没有$this时能出结果,php5.4亦或是哪个会提示/*调用类的静态函数时不会自动调用类的构造函数。*///调用静态方法,不会执行构造方法,只有实例化对象才会触发构造函数,输出构造方法里面的内容Human::tell();
总结
- 静态属性不需要实例化就能实现调用,因为静态变量属性存放的位置是在类里,调用方法为“类名:属性名”;
- 静态方法不需要实例化即可调用。
- 静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
- 静态方法可以调用非静态方法,使用self关键词,php里面,一个方法被self::后,它就自动转变为静态方法;
- 调用静态函数时,不会自动调用类的构造函数。
最后,放上我的全部源代码
首先composer.json
{ "require" : { "illuminate/routing" : "5.1.41", "illuminate/events" : "5.1.41", "illuminate/database" : "5.1.41", "illuminate/view" : "5.1.41" }, "autoload" : { "psr-4" : { "App\\": "app/" } }}
依次执行composer update composer dump-autoload 然后在项目文件夹下新建public文件夹,然后在public里面新建,index.php文件。这是我们的入口文件,在项目下面新建app文件,这是我们应用文件夹,新建Http文件夹,在其中新建routes.php路由控制文件,有了路由文件,为了实现我们的MVC框架,首先M,数据库文件配置文件,项目下新建config文件夹,然后建立database.php文件夹,然后在app文件夹下,新建Http文件夹,新建Models文件夹,V,视图文件在项目下新建resources文件夹,然后新建views文件夹,存放我们视图模板,编译视图文件就项目文件夹下新建storage,里面新建framework,里面新建views文件夹,最后C,控制器,在Http下面新建一个Controllers文件夹就可以了。
详细代码如下所示,index.php
<?php//引入数据库管理类use Illuminate\Database\Capsule\Manager;use Illuminate\Support\Fluent;//引入composer的自动加载文件require __DIR__.'/../vendor/autoload.php';//实例化服务容器,注事件、路由服务提供者$app = new Illuminate\Container\Container;Illuminate\Container\Container::setInstance($app);with(new Illuminate\Events\EventServiceProvider($app))->register();with(new Illuminate\Routing\RoutingServiceProvider($app))->register();//实例化数据操作类//Eloquent ORM$manager = new Manager();$manager->addConnection(require '../config/database.php');$manager->bootEloquent();$app->instance('config',new Fluent);$app['config']['view.compiled'] = "E:\\ww\\lara5.1\\storage\\framework\\views\\";$app['config']['view.paths'] = ["E:\\ww\\lara5.1\\resoures\\views\\"];with(new Illuminate\View\ViewServiceProvider($app))->register();with(new Illuminate\Filesystem\FilesystemServiceProvider($app))->register();require __DIR__."/../app/Http/routes.php";$request = Illuminate\Http\Request::createFromGlobals();$response = $app['router']->dispatch($request);$response->send();
接下来是routes.php
<?php $app['router']->get('/',function(){ return "<h1>路由成功!!!</h1>";});$app['router']->get('/welcome','App\Http\Controllers\WelcomeController@index');
配置数据库的设置,要需要提前建立数据库,然后填入数据。database.php
<?php return [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'lara', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_general_ci', 'prefix' => ''];
配置模型 Model下面新建Student.php
<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Model;class Student extends Model{ public $timestamps = false;}
配置控制器,Controllers下面新建WelcomeController;
<?phpnamespace App\Http\Controllers;use App\Models\Student;use Illuminate\Container\Container;class WelcomeController { public function index() { $student = Student::first(); $data = $student->getAttributes(); $app = Container::getInstance(); $factory = $app->make('view'); return $factory->make('welcome')->with('data',$data); } }
最后视图文件views下新建welcome.blade.php
<!DOCTYPE html><html><head> <title>View展示页面</title></head><body> <h3>在视图中展示学生信息</h3> 学生ID : {{$data['id']}} <br /> 学生name: {{$data['name']}} <br /> 学生age:{{$data['age']}} <br></body></html>
配置好php服务器环境,即可访问。
- Laravel5.1框架关键技术解析(读书笔记)
- Laravel框架关键技术解析(二)
- laravel5.1 框架 自定义分页
- Laravel5.1 目录结构解析
- laravel5.1框架下的用户权限管理
- laravel5.1框架下实现图片上传
- laravel5.1框架下的权限控制
- laravel5.1框架下的批量赋值
- Laravel5框架的搭建
- Laravel5框架的安装
- Laravel5.4框架学习
- 基础设施及服务(IaaS)及关键技术(读书笔记4)
- PaaS(平台即服务)及关键技术(读书笔记五)
- Kafka设计解析(六)- Kafka高性能关键技术解析
- Kafka设计解析(六)- Kafka高性能关键技术解析
- Kafka设计解析(六)- Kafka高性能关键技术解析
- laravel5.1框架下的控制器和页面跳转
- Laravel5.1框架下有关路由的一种解决办法
- 图像抠图算法
- MySQL调优系列_日志分析
- iptables
- Matlab 随笔集
- pyspark lit 常量
- Laravel5.1框架关键技术解析(读书笔记)
- 从科学的角度来理解和田玉---第二篇
- Android视频开发基础(二)
- Maven 私服配置
- Image Morphology(图像形态学)
- jquery中bind,live,on,one,delegate的区分
- heartbeat(高可用)+LVS(负载均衡+健康检查)服务配置(apache测试)
- iOS--KVO的实现原理与具体应用
- Android低功耗蓝牙 升级 5.0以上的BLE开发