当前位置:首页 > 技术 >

php是不是最简单的(php用什么写的)

来源:原点资讯(www.yd166.com)时间:2023-04-17 03:59:05作者:YD166手机阅读>>

此篇文章是想总结下工作中一直在用的一个简单的PHP框架,真的是超级简单,解析步骤如下:

  1. 访问:https://abc.com/user/info
  2. nginx将请求指向index.php
  3. 解析出对应的控制器User和执行方法info
  4. 通过autoload机制实例化控制器,执行对应的方法
  5. 输出结果

项目目录结构如下:

framework/ ├── public/ │ └── index.php ← 入口文件 ├── src/ ← 项目源码 │ └── controller/ ← 控制器目录 │ └── App.php ← 核心解析类 ├── vendor/ ← Composer安装的第三方库 │ └── autoload.php └── composer.json要点nginx

因为框架使用了单一入口,任意请求都会指向index.php文件,所以只需要这么配置:

location / { try_files $uri $uri/ /index.php?$query_string; }autoload

框架中的自动加载使用的是PSR-4的规范,大致原理就是通过文件系统目录结构与PHP的命名空间一一映射起来,即命名空间指向文件所在目录,具体PSR规范可以看这篇文章。所以框架的composer.json文件中我们这样定义:

"autoload": { "psr-4": { "app\\": "src/" } }

app开头的命名空间指向src目录。

入口

既然是入口,那尽量不要做过多限制,让入口变得很臃肿、复杂,只要引入必要的依赖和配置就行,其他事情就交给别人去做就好了,具体如下:

header("Content-type: text/html; charset=utf-8"); date_default_timezone_set("Asia/Shanghai"); require "../vendor/autoload.php"; define('ROOT', __DIR__ . '/../src'); $app = new \app\App(); $app->run();

index.php内容就很简单,没啥好说的,主要解析操作和控制器的分发交给了\app\App处理。

控制器

这个简单的框架是没有单独的路由配置文件的,熟悉laravel的都知道,写业务逻辑之前需要先在routes.php文件中定义路由,而这个框架直接是通过请求路径对应到指定的控制器及方法,比如请求/user/info,控制器就是User,接收方法就是Info,看下怎么解析的:

// App.php public function parse() { $uri = $this->param('REQUEST_URI', 'server'); $p = strpos($uri, '?'); if ($p > 0) { $uri = substr($uri, 0, $p); } @list($_, $controller, $action) = @explode('/', $uri); if (empty($controller)) { $controller = 'index'; } if (empty($action)) { $action = 'default'; } if ($controller && $action) { $c = '\app\controller\\' . ucfirst($controller); $a = 'Action' . ucfirst($action); if (is_callable(array($c, $a))) { $this->controllerName = $c; $this->actionName = $a; return true; } } } public function run() { $this->parse(); if ($this->controllerName && $this->actionName) { $c = $this->controllerName; $a = $this->actionName; $ins = new $c(); $ins->app = $this; do { $res = $ins->before() ; if ($res === false) break; $res = $ins->$a(); if ($res === false) break; $ins->after(); } while(false); } }

上面就是大致的解析流程,解析完成后会实例化对应的调用方法,我们看下控制器是怎么写的:

namespace app\controller; class User extends Base { public function ActionInfo() { $this->setResponse('aa', 123); $this->setResponse('bb', 'hello'); } }

这里,可以看到控制器和方法有点像两级目录,控制器属于一级,对应的方法属于二级目录,简单清晰,但是不能处理复杂路由。

数据库

公司内部使用的是自研的一套数据模型,就是封装的一个抽象数据层,包括了redis,mysql等,如果要使用Eloquent等其他比较流行的ORM,这里可以配合composer autoload使用。

缺点

没有统一的路由配置文件,每个路由需要人工记住有哪些控制器和方法。

一个路由只能针对一个请求使用,拿上面的/user/info来说,get、post请求都会发送到同一个处理方法上,这就变得很耦合,而且也不符合不同请求方法本身的目的,但可以建新的路由来解决,可也会增加路由数量造成维护的负担。

缺少一套模版引擎。

总结

相比于市面上成熟的框架,这个框架可谓相当的简陋,可以说是非常原始了,没有任何高大上的技术,比如依赖注入、服务容器、服务提供者等。我认为框架就是一套约定好的代码编写风格以及大量工具类的集合,学会使用框架就是按照这套风格写控制器,什么地方放配置文件,掌握工具类的使用,毕竟大部分情况都是处理CURD和编写业务逻辑,运用框架会大幅度提高开发效率。所以在选择框架时没必要在意使用了什么技术,反而更应该在意框架的效率/性能以及周围的生态。当然这也不妨碍我们自己造轮子 ^^

,

栏目热文

5年php经验找不到工作(php初学者如何找工作)

5年php经验找不到工作(php初学者如何找工作)

Python是一门很出色的胶水语言,也就是当我们有现成的组件后,Python非常适合将他们组装起来。机器学习的例子就比较...

2023-04-17 03:57:46查看全文 >>

php底层结构图(php 设计模式示意图)

php底层结构图(php 设计模式示意图)

作为一门动态语言,php是如何实现的,其底层机制如何,具有什么样的特点,本文深入浅出介绍了包括php设计理念、整体结构...

2023-04-17 04:03:09查看全文 >>

php底层内部运行机制(php工作原理及使用方法)

php底层内部运行机制(php工作原理及使用方法)

PHP的设计理念及特点多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影...

2023-04-17 04:07:19查看全文 >>

php代码执行原理(php代码运行的方法)

php代码执行原理(php代码运行的方法)

前言针对不同平台/语言下的命令执行是不相同的,存在很大的差异性。因此,这里对不同平台/语言下的命令执行函数进行深入的探究...

2023-04-17 04:06:06查看全文 >>

芦荟砍头秋季(芦荟几月份砍头最好)

芦荟砍头秋季(芦荟几月份砍头最好)

“芦荟”枝叶稀少,实施“砍头计划”,侧芽抽不断,叶片长爆盆!芦荟是一种非常有意思的盆栽植物,相信很多人都喜欢芦荟,它养在...

2023-04-17 04:05:11查看全文 >>

php 用什么开发(php用的什么工具开发的)

php 用什么开发(php用的什么工具开发的)

首先,我们先普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如编写一篇文章,下载一首MP3...

2023-04-17 03:57:29查看全文 >>

php底层深度解析(php底层学习教程)

php底层深度解析(php底层学习教程)

PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。PHP是一种适用于web开发的...

2023-04-17 03:56:59查看全文 >>

php框架的底层原理(php各种框架的优缺点)

php框架的底层原理(php各种框架的优缺点)

本文分6个主题进行讲解PHP运行机制和原理PHP底层变量数据结构PHP传值赋值中的COW特性PHP垃圾回收机制PHP中数...

2023-04-17 03:57:46查看全文 >>

php底层源码分析(php底层源码真实感受)

php底层源码分析(php底层源码真实感受)

文章来自:php自学中心工作这么多年,也面试过很多PHP工程师,我发现很多PHP工程师只停留在使用框架的层面,然而对框架...

2023-04-17 04:22:59查看全文 >>

php简单介绍(php 使用教程)

php简单介绍(php 使用教程)

PHP简介 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通...

2023-04-17 03:41:19查看全文 >>

文档排行