一.前言 使用php已有好几年,laravel的使用也是有好长时间,但是一直对于框架源码的理解不深,原因很多,归根到底还是php基础不扎实,所以源码看起来也比较吃力.最近有时间,所以开启第5.6遍的框架源码探索之旅,前面几次都是看了一些就放弃,希望这次能够看完.每一次看源码都会有新的收获,因为框架用到的一些设计模式.高级特性,在平时的业务需求里面根本用不到,或者说项目前期就把需要用到高级特性的地方都做好了,业务需求也就用到mvc. 本文及后续的“laravel框架源码分析“文章都是基于larav…
在使用框架开发时,可以发现框架有很多核心类,却很少看到显示的引入某个文件的代码,这是因为框架都采用了类的自动加载机制,即使用到类时,框架会自动找到该类所在文件的位置并引入该文件.为了更容易看出代码思路,下面在说明时,只抽取了相关的主要代码.在剖析thinkphp源码之前,先说说我做的一个项目实现的自动加载思路.根据文件命名特点来确定文件所在的位置.入口文件代码: //入口文件index.phprequire_once('base.php');if(function_exists('spl_aut…
1.本系列文章的目的 实现一个小而美的产品级别php框架 自己动手实现一个新框架仅用于学习交流,不打算替代市面上现有的其他主流框架. 2. 我要一个怎样的PHP框架 简单实用,安全优雅,博采众长 安装简单,上手简单,扩展简单 不需要编译C扩展. 不需要知道什么是composer. 不需要改nginx.cnf .htaccess各种重写规则. 但支持各种环境,从最低端的虚拟空间到独立服务器,从单机xampp,phpstudy, 到各种云sae,bae,以及高大上的分布式架构部署方式.绿色无需安装,…
所有的外部输入参数都应该检查合法性. 未正确处理输入数据将可能导致sql注入等漏洞. 框架提供系列函数来取$_REQUEST中的值 requestInt requestString requestFloat requestBool ps:注意$_REQUEST中变量类型可能会是数组 如请求为 ?i[]=1,那么$_REQUEST['i'] 的值为array(1) 做校验的时候要考虑全面以防止php warning信息泄露 另外再介绍一下kv json格式的数据校验. 有时为了在项目中保留一定扩展…
1. 组织文件布局应该考虑什么问题 前后端分离 各业务模块分离但方便互相调用 上传文件安全性 方便接入第三方类库 如图所示 框架入口文件 uct/index.php 框架目录         uct/framework 业务目录         uct/app 文件上传目录  upload 第三方类库      uct/vendor 框架目录framework下和业务目录web下均有类似结构 control目录与model目录, 另外web下还有前端目录tpl和view.tpl用于放置后台管理页…
实现一个mysql数据库封装需要考虑的问题 使用方便性 采用直接sql语句操作方式.只要会写sql语句,那么将没有其他学习成本. uctphp框架提供的dba辅助封装类,用会之后将爱不释手. 使用前需要显示初始化并连接到数据库吗,当然不需要. 直到执行第一条sql语句之前,都不会去连接数据库,甚至不会new一个db对象. dba将会在合适的时机去连接数据库并执行初始化字符编码操作. 查询语句.不需要new一个查询构造器也不提供链式操作方式,那样复杂且低效. dba提供了以下的查询辅助函数. 1…
直接通过url参数访问业务模块($app)中控制器($ctl)里的函数($act) 我们支持3种路由模式 普通模式 _a=$app,     _u=$ctl.$act 最简单的方式,专注实现业务$act函数,不需要再写额外代码 为什么参数名前面要加下划线就不解释了 easy模式 _easy=$app.$tpl.$ctl.$act _easy=$app.$ctl.$act 在web开发中,通常我们在$act中输出一个前端页面, easy模式下,如果未实现$act处理函数,会自动寻找并显示对应的前端…
根据前一篇文章的设计原则,我们暂时把php文件分为3类,类名和文件名都遵守如下约定.   类名 文件名 路径 模型类m {$app}Mod  {$app}.mod.php {$app}/model   控制器类c {$app}Ctl {$app}.ctl.php {$app}/control 其他 {$app} {$app}.cls.php {$app}/class 可以实现一个简单的autoload函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18…
psr4自动加载规范https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 我们把第三方使用psr规范的类库放在vendor目录下 修改一下autoload函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22     //psr     if (!empty($GLOBALS['_UCT']['autoload_psr'])) {        …
前言 tp5想必大家都不陌生,但是大部分人都停留在应用的层面,我将开启系列随笔,深入剖析tp5源码,以供大家顺利进阶.本章将从类的自动加载讲起,自动加载是tp框架的灵魂所在,也是成熟php框架的必备功能 入口 // [ 应用入口文件 ] namespace think; // 加载基础文件 require __DIR__ . '/../thinkphp/base.php'; base.php <?php // +------------------------------------------…