日志,mysql事物操作

创建一个入口文件index.php

创建文件目录结构

Config :配置文件

Controller :控制器文件

Model :模型文件

Vendor :系统文件以及类文件

Log :日志目录

 

入口文件:

 

初始化文件

Vendor\init.php

Defined:判断常量是否被定义,被定义返回true 否则 返回 false

|| :或的关系

从左至右执行;

如果左侧的返回值为true,整个表达式返回true继续向下执行

如果左侧的返回值为false,会执行右侧的表达式,利用这个规则,定义常量,功能与如下代码类似:

 

自动加载文件

Vendor\autoload.php

类文件中定义命名空间

通过命名空间与__autoload魔术方法,实现类文件自动加载

当实例化一个不存在的类的时候,会自动执行__autoload()函数,类名(命名空间)会以参数的形式传递到__autoload方法中,我们就可以通过命名空间与类名找到想要实例化的类的位置,并且引入

 

Namespace 定义类文件的空间位置

Use 可以引入命名空间的类

 

常量配置文件
Config\const.php

$_SERVER[‘REQUEST_TIME’] :获取当前请求的时间 可以代替 time()

 

自定义函数文件

Vendor\function.php

定义一些常用的并且需要全局调用函数

 

配置文件

Config\config.php

通用配置

引用init.php代码片段

Include会将引入文件的数组返回,这里面将数组赋值给了$GLOBALS变量(超全局变量)

 

控制器文件

Controller\Controller.class.php

 

__call:魔术方法,调用类中不存在的方法时自动调用,并且以参数的形式传递给__call 方法的名称以及参数

调用const.php的代码片段

这里面定义了一个统一的方法的后缀名为Action

 

我们定义控制器方法的时候,需要在正常的方法名后面增加Action

 

我们调用的时候不带后缀调用,引入index.php代码片段

正常情况下调用create方法会报方法不存在的错误,但是我们定义了__call,会将调用的方法名称与参数传递过来,进入__call方法,接下来就解析一下__call方法:

将真正的方法名称拼接出来

 

实例化Model对象,用于调用事务方法

Try catch结构可以捕捉并处理异常,try中写入逻辑代码,当执行出现异常时,系统自动获取异常信息并进入catch结构中,将错误信息传递给 \Exception $e中的$e变量中

为什么Exception类需要\调用,因为当前类文件使用了命名空间,那么在这个文件中调用或者实例化任何类,都回在当前的命名空间去寻找相当于: \Controoler\Exception 如此这般调用,显然是找不到的。

如果我们在类的前面增加\,那么就是告诉系统我们要在根命名空间中调用类

 

事务:使用事务配合Try catch使用的话,那么必然要在Model中封装异常处理

 

封装的原理:利用__call方法,将事务与日志处理封装,所有执行的方法,全部在事务的包含里,这样的话就不需要重复的写相同的代码,减少了代码量,提高代码阅读效率

 

那么这个参数中的...是什么意思呢?

如果我们不知道要传递的参数的数量是多少,那么我们就将这个参数以数组的形式传递,并且在实参的前面增加...,这样的效果就会将数组中所有的值,作为单个的参数传递到形参中,代码如上

如果我们不确定要接收的参数的数量是多少,也可以用...来表示,形式为:

这样的话,形参会以数组的形式将所有的参数全部的合并到数组(索引数组)中,我们可以循环获取参数

 

 

数据库操作类

Model\Model.class.php

Model中的构造函数:

我们在这里通过获取$GLOBALS变量中的数据库配置,链接数据库

 

事务处理方法

 

错误处理方法

ErrorInfo 就是PDO类中的获取错误信息的方法

 

当执行这个方法的时候,证明sql执行错误了,为了处理相关错误信息,配合我们Try catch使用,我们需要抛出一个异常供try catch捕捉

 

抛出异常的方法

\Vendor\ExceptionHandler这个类为自定义类,为了方便异常处理,提供我们日志想要的数据,我们需要重写Exception类,我们通过面向对象中多态特性,对父类中的值或者方法进行重写,重写的代码如下:

Debug_backtrace()方法, 产生一条回溯跟踪,获取错误的位置,重新定义错误文件位置以及行数

 

日志处理类

Vendor\Log.class.php

使用文件锁实现抗并发的写入

Flock:文件锁定,可实现共享锁定与排他锁定

共享锁:锁共享机制,可并发读取,无法并发写入,其他链接对共享锁文件执行写入触发等待,锁释放后放可写入

排他锁:锁排他机制,无法并发读取、写入,如果文件已经处于排他锁定阶段,其他链接获取锁会等待锁释放后方可

 

静态定义,静态调用,执行速度快,内存消耗大

 

Array_keys_exists(key, array); 检查给定的键名或索引是否存在于数组中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值