如何利用PHP写一个简单实用的框架
Admin 2022-08-01 群英技术资讯 391 次浏览
先从路由开始来说:
1)路由
路由协议的规则是使用了正则表达的匹配,将不同的链接分发到不同的控制器上去,也支持调用匿名函数
// 第一种,使用匿名函数 App::router()->get('/', function () { echo "Beauty Framework."; });
// 第二种,使用url分发到控制器 App::router()->post('/user/info/[0-9]+(/[0-9]+)?', 'App\Controllers\UserController@getUserInfo');
其中实现的核心代码:(是不是很简单)
if (is_string($lostrcallable) && preg_match('!^([\a-zA-Z0-9]+)\@([a-zA-Z0-9]+)$!', $lostrcallable, $matches)) { $class = $matches[1]; $method = $matches[2]; $callable = function () use ($class, $method) { static $obj = null; if ($obj === null) { $obj = new $class; } return call_user_func_array(array($obj, $method), func_get_args()); }; }
2)控制器
没有的,你指向的哪里,就可以在哪里进行请求处理,但是按照MVC,建议写到Controller里,大家都是这么认为的,就这么做;
3)模型层
这里直接集成了Dao类,用于数据库查询操作,因为现在很多都在使用MySQL,就耦合地实现了MySQL的常规操作,因为数据库的原生操作会引起很多的注入等问题,没有支持直接Qquery的方式来做。
4)DAO层
因为很多情况下都要进行读写分离,但是要使用MySQL Proxy来实现,有太过笨重,所以实现了支持数据库query根据不同的sql分别使用master和slave数据库。
怎么做的?
就是根据不用的查询操作直接划分,Select查询操作直接分到读库,Insert、Update、Delete直接分到写库。也可以直接使用onMasterConnection/onSlaveConnection直接指定.
看看Select怎么做的,这部分是实现逻辑:
/** * 获取查询内容,以数组形式返回,数据内为array。 * * @access public * @param integer|array $limit Array to define SQL limit in format Array ($count, $offset) * or only $count * * @return mixed Array of Clients */ protected function get($limit = null) { $this->dbClient->setQueryChannel($this->channel); $results = $this->dbClient->arrayBuilder()->get($this->dbTable, $limit, $this->fields); $this->_reset(); if ($this->dbClient->count == 0) { return []; } return $results; }
5)配置类
在开发环境和生产环境会使用不同的配置环境,在框架中可以创建.env环境来切换。在config中可以常规设置development和production,使用哪个环境就在.env设置哪个
; This is a environment configuration file environment=development
当然也有一些公共的配置信息,可以在config文件里直接设置,这样就可以在哪个环境都可以使用。
// 支持使用.连接访问配置项,访问的是config/app.php中的config key \Beauty\Core\App::config()->get("app.config");
6)请求响应
因为不需要View,只需要返回json数据,所以在Header直接写死了text/json。 = =
其他实现了
memcache和redis采用一致性哈希访问不同的实例。
validator验证类
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
很多的项目中,如果涉及到上传图片的功能时候,其实所运用的方式就是通过laravel自带的上传图片的方法上传的,但是却突然报错:413 Request Entity Too Large问题,是什么原因导致的的呢?该怎么去解决?
在之前的文章中我们介绍了使用冒泡算法对数组元素进行升序排序的方法,感兴趣的可以点击链接进行查阅→《PHP数组学习之使用冒泡算法对元素进行升序排序!》。这次我们继续PHP数组学习系列,介绍一下比较数组元素,获取第一大和第二大值的方法。
swoole关闭进程的方法:首先把代码里的守护进程改成0;然后通过命令“netstat -apn | grep 9503”查找这个端口号的pid;接着使用命令“kill -9 18669”杀死这个进程;最后重新开启监听程序即可。
在PHP中,如果我们想要从数组中删除元素,那么我们就可以使用unset()函数,unset()函数能够用来销毁给定的变量。那么unset函数怎么用呢?下面小编就给大家介绍unset()函数的用法。
如何用php获取当前日期的7天内的时间,比如今天是5号,我想获取5号前7天的日期,怎么获取?实现方法如下:如何用php获取当前日期的7天内的时间实现方法如下:$t=time()+3600*8;//这里和标准时间相差8小时需要补足$tget=$t-3600*24*5;//比如5天前的时间echodate("Y-m-dH:i:s星期w",$tget);//格式按你需要选取例:$che
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008