第一章 组建开发与composer使用
突出特点:
组件化开发、IoC容器技术、分布式应用框架设计
PHP开发规范:
PSR0-PSR4
PSR-4规范的目录不需要添加命名空间
PSR-0规范的目录需要添加命名空间
Classmap 会扫描指定目录的所有.php 和.inc文件,并加载到vendor/composer/autoload_classmap.php文件中,在该文件中实现一个具体类与文件映射的关联数组,也可以直接精确指定一个文件
Composer 命令行简介
Composer list 获取帮助信息
Composer init 以交互方式填写composer.json文件信息
Composer install 从当前目录读取composer.json文件,处理依赖关系,并安装到verdor目录下
Composer update 获取依赖的最新版本 升级composer.lock文件
Composer require 添加新的依赖包到composer.json文件中并执行更新
Composer search 在当前项目中搜索依赖包
Composer show 列举所有可用的资源包
Composer validate 检测composer.json文件是否有效
Composer self-update 将composer工具更新到最新的版本
Composer create-project 基于composer创建一个新的项目
Composer dump_autoload 在添加新的类和目录映射时更新autoloader
构建过程五个步骤:
项目初始化、路由组件添加、控制器模块添加、模型组建添加和视图组件添加
添加模型组件:
两种操作数据库的方式:一种是查询构造器方式 两一种是Eloquent ORM方式
Eloquent ORM方式
创建数据库 添加数据库配置信息、启动Eloquent ORM模块、创建model类和通过model类操作数据库
数据库配置:
www\lara\config\database.php
<?php
Return [
‘driver’ => ‘mysql’,
‘host’ => ‘localhost’,
‘database’ => ‘lara’,
‘username’ => ‘root’,
‘password’ => ‘root’,
‘charset’ => ‘utf8’,
‘collation’ => ‘utf8_general_ci’,
‘prefix’ => ‘’
];
?>
视图组建的使用 四步骤:
一是添加视图模板文件和编译文件的存储路径 二是对视图进行相关配置和服务注册
三是 使用视图文件 四是创建视图模板文件
第二章 laravel框架安装与调试环境建立
Phpstudy包含:四种服务器 Apache 、Nginx、IIS、Lighttpd
Laravel框架的安装
<![if !supportLists]>1.<![endif]>通过composer包安装(有些情况无法下载,国内防火墙拦截了)
<![if !supportLists]>2.<![endif]>一键安装包安装
Phpstudy 单击“其他选项菜单”,后选择“php版本切换”,可以选择php版本。
Phpstudy 单击“mysql管理器”,选择“站点域名管理”, 打开“站点域名设置”;
设置网站域名为:127.0.0.1:1000 网站目录选择laravel下的public文件夹
第二域名不用填写 网站端口填写10000 主要是避开80与8080端口
填写完毕后单击“新增” 选择保存的设置并生成配置文件使配置生效
单击“其他选项设置”,选择“打开配置”,选择httpd-conf文件
在约60行 添加 listen 10000
设计监听端口的作用?
浏览器在访问apache和端口的时候,就可以访问apache及端口下的内容
Laravel框架需要php的openssl扩展支持(单击“其他选项菜单”->“php扩展及设置”->“php扩展”)把php_openssl勾选后重启即可
Phpstorm+xdebug调试环境搭建 进行软件调试必将事半功倍
第三章 laravel框架中常用的php语法
命名空间:
具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。
匿名函数:
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值
PHP匿名函数的定义很简单,就是给一个变量赋值,只不过这个值是个function。
$func = function(){
echo$num;
};
反射机制:
反射是指在PHP运行状态中,扩展分析PHP程序,导出或提出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能称为反射API。
后期静态绑定:
准确说,后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwarding call)的类名。当进行静态方法调用时,该类名即为明确指定的那个(通常在::运算符左侧部分);当进行非静态方法调用时,即为该对象所属的类。所谓的“转发调用”(forwarding call)指的是通过以下几种方式进行的静态调用:self::,parent::,static:: 以及forward_static_call()。可用get_called_class()函数来得到被调用的方法所在的类名,static::则指出了其范围。
命名空间:
__NAMESPACE__和namespace的区别
__NAMESPACE__:直接获取当前命名空间字符串,如果为全局代码,魔术常量将获取一个空的字符串
Namespace:显示访问当前命名空间 如果没有定义命名空间,即为全局空间,相当于根空间,通过”\”来表示
命名空间的使用:通过use关键字
文件访问方式三种:
方式一:通过相对路径访问文件 currentdirectory/file.txt
方式二:通过带限定的相对路径访问文件 如subdirctory/file.txt 地址currentdirectory/sub-directory/file.txt
方式三:通过绝对路径访问文件 如C:/currentdirectory/file.txt
Php命名空间的使用 三种:
方式一:非限定名称或不包含前缀的类名称 如$a= new Kernel().如果当前命名空间为currentnamespace,Kernel将被解析为currentnamespace\Kernel。如果当前空间是根空间,即是全局,则Kernel会被解析为\Kernel
方式二:限定名称或包含前缀的名称 如$a = new subnamespace\Kernel().如果当前的命名空间是currentnamespace,则Kernel被解析为currentnamespace\subnamespace\Kernel。如果是根空间,Kernel会被解析为subnamespace\Kernel
方式三:完全限定名称或包含了全局前缀操作符的名称 如$a= new \currentnamespace\Kernel() 在这种情况下,Kernel总是被解析为\currentnamespace\Kernel
注:php命名空间只支持导入类,而不支持导入函数或变量
空间名称解析规则:
<![if !supportLists]>1.<![endif]>对完全限定名称的函数、类和常量可以直接解析 例如 new \A\B解析为类A\B.
<![if !supportLists]>2.<![endif]>对于所有非限定名称和非完全限定名称的函数、类和常量。根据当前导入的命名空间进行转换。例如,如果命名空间A\B\C被导入,那么new C\D\E()就会被转换为A\B\C\D\E();
<![if !supportLists]>3.<![endif]>在命名空间内部,所有的没有根据导入规则转换的非限定名称和非完全名称均会在其前面加上当前的命名空间名称。例如,在命名空间A\B内部调用C\D\E()时,如果没有导入命名空间A\B\C,则new C\D\E()会被转换为new A\B\C\D\E();
<![if !supportLists]>4.<![endif]>在命名空间内部,对非限定名称和非完全限定名称的函数进行调用时,现在当前命名空间下解析,如果查找不到再在全局空间下查找
<![if !supportLists]>5.<![endif]>在命名空间内部,对非限定名称和非完全限定名称的类进行调用时,只会在当前命名空间下解析。如new C(),只会转换成new A\B\C(),如果想引用全局命名空间中的全局类,必须使用完全限定名称new \C();
第四章 laravel框架中使用的http协议基础
第一:获取目标服务器地址通过统一资源定位符URL
第二:相互间信息的传输通过超文本传输协议HTTP实现
第三:服务器返回内容的解析通过超文本标记语言 HTML
HTTP协议是一种应用层协议
OSI协议被分为七层 HTTP协议被分为五层
每一层首部都至少包含两部分信息:
一部分是接收者和发送者的地址 另一部分是上一层的协议类型
数据链路层使用MAC地址网络层使用ip地址传输层使用端口号
MAC寻址需要参考地址转发表 IP寻址需要参考路由控制表
网段实际上就是一个广播域,如果目标主机的IP在子网掩码的网段内,则表示发送地址为同一个网段。
ARP地址解析协议
HTTP请求/响应模式的信息交互过程 四个步骤:
<![if !supportLists]>1.<![endif]>客户端与服务器需要建立连接 如TCP连接
<![if !supportLists]>2.<![endif]>连接建立后,客户端向服务器发送一个请求 请求报文:请求行、消息报头、请求内容
<![if !supportLists]>3.<![endif]>服务器接到请求后,解析该请求并返回响应信息 响应报文:状态行、消息报头、响应内容
<![if !supportLists]>4.<![endif]>客户端接收服务器所返回的信息进行解析、处理和显示
第五章laravel框架初识
Laravel应用程序框架按照PSR-0 和PSR-4规范组织文件的目录结构,自己组织的目录结构或新添文件需要composer实现自动加载
Laravel应用程序根目录介绍
App:应用程序核心代码,用户构建的大部分工作都在这个目录下进行 包括:路由文件、 控制器文件、 模型文件
Console:主要包含所有的artisan命令
Events:用来放置与时间相关的类
Exceptions:包含应用程序异常处理类,用于处理应用程序抛出的任何异常
http:主要包含路由文件、控制器文件、请求文件、中间文件等,是应用程序与laravel框架源代码等外部库交互的主要地方
Jobs:主要包含消息队列的各种消息类文件
Listeners:主要包含监听事件类文件
Providers: 主要包含服务提供者的相关文件
Bootstrap:主要包含几个框架启动和自动加载配置的文件
Config:主要包含应用程序常用的配置文件信息
Database:主要包含数据迁移和数据填充文件
Public:为应用程序的入口目录,包含应用程序的入口文件index.php,同时包含静态资源文件如css、javascript、images等
Resources:主要包含视图文件
Storage:包含编译后的blade模板、基于文件的session、文件缓存和日志等文件
Tests:包含自动化测试文件
Vendor:主要包含依赖库文件,其中包括laravel框架源代码
Composer:主要包含composer按照PSR规范生成的自动加载类。应用程序的自动加载类都是由这部分实现的
Laravel:包含laravel框架源代码,代码部分都包含在vendor/laravel/framework/src/illuminate文件夹下,在该文件夹下又包含很多文件夹,每个文件夹又是一个组件。
Symfony:laravel框架的底层(如请求类、响应类、文件管理类等)使用了symfony框架的部分
Monolog:包括日志记录模块文件
Phpunit:包含程序单元测试模块文件
.env文件:一个重要的文件,为laravel框架主配置文件
Composer.json文件:composer项目依赖管理文件
Laravel框架应用程序的三个重要环节:
路由阶段、控制器阶段、视图阶段
多种请求的路由定义可以通过match()和any()方法实现
Route::match([‘get’,’post’],’/’,function(){ return ‘hello laravel’;})
Route::any(‘home’,function(){ return ‘hello laravel’;})
三种控制器路由:
基础控制器路由:
route::请求方法(‘资源标识/{参数名[?][/{参数名}…]}’,’控制器类名@函数名称’);
Route::get(‘home/{ name}’,’HomeController@index’);
隐式控制器路由(一条语句定义多条路由):
Route::controller(‘路由前缀’,’控制器类名’[, 命名路由]);
RESTFul资源控制器路由(是一种接口设计的思想和规范):
Route::resource(‘根资源标识’,’控制器类名’);
控制器类处理函数名
Index 索引 create创建 store保存 show 显示 edit编辑 update更新 destory删除
数据传递三种方式:
方式一:通过数组
方式二:通过with()函数
方式三:通过with加变量名的形式
Blade模板
Blade模板是laravel所提供的视图文件模板引擎
@extend(‘布局文件名’);用于继承一个布局文件 @section(‘区块名’);用于定义一个区块
@show用于显示区块 @stop和@endsection 用于结束一个区块
@overwrite 用于重写前面的区块 @include(‘子视图名称’) 用于加载子视图文件
@parent 用于显示继承的布局模板中的内容
@yield(‘区块文件’,’默认内容’);用于在布局文件中定义一个区块
第六章laravel框架中的设计模式
服务容器是整个系统功能调度配置的核心,是框架“心脏”。容器通俗的说“装东西的物体”。
依赖:在程序中依赖可以理解为一个对象实现某个功能需要其他对象相关功能的支持
Ioc模式(依赖注入模式)。
控制反转:是将组件的依赖关系从程序内部提到外部容器来管理
依赖注入:指组件的依赖通过外部以参数或其他形式注入
IOC模式的设计思想:在系统运行期间,将依赖关系通过动态注入的方式实现
Compact创建一个包含变量名和值的数组
<?php
$firstname = “bill”;
$lastname =”Gates”;
$age=”60”;
$result = compact(“firstname”,”lastname”,”age”);
?>
服务容器是通过Illuminate\Container\Container类来实现的。
$bindings用于存储提供服务的回调函数
$instances用于存储程序中共享的实例
//代码
<?php
$my_array = array(“Dog”,”Cat”,”Horse”);
list($a, $b, $c) = $my_array;
echo “I have several animals, a $a, a $b and a $c.”;
?>
//结果
I have several animals, a Dog, a Cat and a Horse.
完成对应服务的查找make()
完成对应服务的实现Build()
array_pop() 函数删除数组中的最后一个元素。
public static 表示公共的静态方法;
public 表示公共的方法;
静态方法不需要实例化,直接通过 类名.方法()调用;
公共方法需要实例化,通过new 类名.方法()调用;
Array_reverse()以相反的元素顺序返回数组
Array_reduce()向用户自定义函数发送数组中的值,并返回一个字符串:
//代码
<?php
function myfunction($v1,$v2)
{
return $v1 . “-” . $v2;
}
$a=array(“Dog”,”Cat”,”Horse”);
print_r(array_reduce($a,”myfunction”));
?>
//结果
-Dog-Cat-Horse
单例模式:
上面的对象图中,有一个“单例对象”,而“客户甲”、“客户乙”和“客户丙”是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。
单例模式有以下3个特点:
1.只能有一个实例。
2.必须自行创建这个实例。
3.必须给其他对象提供这一实例。
生成实例消息处理
通过静态函数来避免实例化的过程
服务容器和服务提供者实现各种服务
设计容器类,容器类装实例或提供实例的回调函数
接口:是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。
一个类可以继承多个接口,一个类只能继承一个抽象类。