index.php说明

在服务上,PHP 引擎其实只执行了 index.php 这一个文件,index.php 可以抽象的看做是产品的最终型态,app 下的文件规定如何组装,system 下的文件提供基本的“组装零件”,最后拼装成一个完整的产品,这就是 index.php。

下面参考 index.php 中的具体实现来一一说明:

// 引入路由解析文件

include('./system/url.php');

// 引入常量定义文件

include('./system/constant.php');

// 引入框架函数库

include('./system/function.php');

// 解析数组拿到路径

url::analyse($_SERVER);

$obj = new url();

// 加载指定文件

include(APP.$obj->get('path').EXT);

$class_name = $obj->get('controller');

$func = $obj->get('func');

$app = new $class_name();

$app->$func();

在设计过程中,最初的划分其实是这样的:

1.框架环境载入

2.框架功能执行

3.应用功能执行

抽象的看,index.php 由如上的几个部分构成,按照规划,进一步细分就有了最上面的具体实现。

文件引入

需要说明,文件的引入顺序并不重要,这些只是准备工作,谁前谁后,并没有什么区别。

要使用工具前必须要先准备工具。前面所说的文件引入顺序并不重要,强调的是所有引入文件之间的顺序并没有关联关系。但是,引入文件必须要在具体的执行逻辑之前,比如,下面这种写法就是错误的

// 解析数组拿到路径

url::analyse($_SERVER);

// 引入路由解析文件

include('./system/url.php');

// 引入常量定义文件

include('./system/constant.php');

// 引入框架函数库

include('./system/function.php');

错误的原因在于,使用了还没有引入的功能组件,url::analyse($_SERVER) 执行时,url 类还不存在。理解这一点,需要一些更基础的知识。

计算机如何运行

众所周知,计算机的核心是 CPU(此处仅用来进行简略的说明,不需要的内容都被省略,更详尽的基础知识请参考其他权威资料)。

CPU 只能做以下简单的事情:

从寄存器读取数据;

计算;

将结果写入寄存器。

一个脚本在被载入内存(内存是一种特殊的寄存器)之后,CPU 会从头开始一条一条读取脚本并执行,CPU 只能够识别机器码(0100101111001....00011001,类似这样的由 0 和 1 组成的长串),所以 index.php 在执行之前先要进行翻译,编译成 CPU 能够识别的机器码,编译过程也是一一对应,并不会打乱顺序,编译之后的机器码可能是这样

0100 1110

0011 1011

...

0010 0001

1111 1111

...

脚本(index.php)的一行可能对应机器码中的一行或者多行。

进程(简单的理解,执行的一个程序)在执行前会被分配一片内存空间,用于存储代码、数据和临时变量。

如果 url::analyse($_SERVER) 在引入文件之前被执行,CPU 会在线程的内存空间中索引对应的类,而载入的动作在后面,显然是索引不到的,这样就会抛出一个错误。

这就是前面所说的,工具必须在使用之前就准备好,执行逻辑和载入文件之间具有同步(可以理解为具有先后顺序要求)关系。

框架功能执行

具体指

// 解析数组拿到路径

url::analyse($_SERVER);

$obj = new url();

// 加载指定文件

include(APP.$obj->get('path').EXT);

$class_name = $obj->get('controller');

$func = $obj->get('func');

这一段处理了这么几个问题:

解析请求,拿到目标路由

加载目标文件

获取控制器,方法名

应用功能执行

具体指

$app = new $class_name();

$app->$func();

这是业务执行的核心,虽然所有的请求利用的是同样的逻辑,但是通过模块,控制器和方法名参数的变化,就可以实现不同业务逻辑的加载,进而实现不同的业务。

PS:本系列文章最佳阅读方式,IDE+本地运行环境,IDE中阅读可配合 demo 运行增进理解,GitHub地址

本作品采用《CC 协议》,转载必须注明作者和本文链接

城里的野山参

php index.php 文件路径,自研 PHP 框架 1.0_index.php 文件说明相关推荐

  1. Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码

    Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码 目录 文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码

  2. windows复制文件路径_如何在Windows 10上复制文件的完整路径

    windows复制文件路径 Sometimes, it's handy to copy the full path of a file or folder in Windows 10 to the c ...

  3. js已知文件路径得到file对象_NodeJs 的几种文件路径

    Node 中的文件路径大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三个都是绝对路径,为了便于比较,./ 和 ../ 我们通过 path.r ...

  4. java 获取ftp 文件路径_java在浏览器上获取FTP读文件路径

    展开全部 问一下,你是62616964757a686964616fe4b893e5b19e31333337623437想做ftp上传下载么? 首先你需要安装一个ftp服务端程序,启动起来,然后下载一个 ...

  5. mac系统python读取文件路径_Python小技巧:3个处理文件路径的简单方法

    原标题 | Python 3 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux 作者 | Adam G ...

  6. 大文件分片上传前端框架_js实现大文件分片上传的方法

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  7. java io 文件路径_【IO流】java中文件路径(相对路径、绝对路径)相关类及方法...

    1. URL 菜鸟教程:Java URL处理 通常推荐对http等协议进行使用,若操作(file:)部分属性将无意义,建议getFile(). 相关:URLConnections 类 可以打开连接进行 ...

  8. android mapping文件 路径,Android打包代码混淆后的Mapping文件路径

    大家在发布一个新版本时,如果采用了代码混淆,所生成的apk在反编译之后,会看到进行了混淆的代码中的类名.方法名等会变成单个英文字母,这样子可读性直线下降,起到代码保护的目的. 不过,凡事有利也有弊,我 ...

  9. c#语言 修改xml文件路径,C#对XML操作:编辑XML文件内容-.NET教程,C#语言

    public void page_load(object src,eventargs e) { /* * 版 权 : copyright by sem it department * 版 本 : ve ...

最新文章

  1. 使用Qt开发中国象棋(一):概述
  2. flash 林度_flash动画的视频应用
  3. VB 几种打开文本文件速度对比
  4. 爬虫文件存储-2:MongoDB
  5. 点击类选择器,获取索引
  6. SQL中的join的详细用法!inner join,full outer join,left join,right jion
  7. nginx connect() to (13: Permission denied) while connecting
  8. 基于51单片机的流水灯(C语言)
  9. JAVASUNHome家政服务管理平台计算机毕业设计Mybatis+系统+数据库+调试部署
  10. 2019世界互联网大会 聚焦网络安全发展新动能新要求 最新等保测评机构名录发布10月版
  11. php用do while实现斐波那契数列,php实现斐波那契数列
  12. 将Hexo个人博客部署到个人云服务器--最详细踩坑教程
  13. 装饰及家具设计的主要材料
  14. 芯片的IR drop是什么
  15. windows查看自己的网卡名称
  16. 小姐姐让我帮忙修照片
  17. 怎样将WPS文件转换成Word文档
  18. 互斥事件的概念和公式_专题49 互斥事件和独立事件的概率及条件概率(打包)-2019年高考数学(理)名师揭秘之一轮总复习...
  19. iphone开发每日一练1【2011-09-30】
  20. 常见的网页布局解决方案

热门文章

  1. vim 的寄存器/剪贴板
  2. Linux 命令之 tree -- 以树状图列出目录的内容/查看目录内容
  3. 如何知道一个域名是否存在_域名检测API实现查看一个域名在微信中是否被封
  4. 【OpenGL从入门到精通(一)】Windows搭建OpenGL的渲染环境,并初始化一个OPenGL窗口
  5. 华为p6电信版 android 4.5,华为P6电信版系统应用apk补全教程 完整EMUI
  6. 用java编写一个图书管理系统_手把手教你编写第一个java程序
  7. C语言中几个容易踩的“坑”!
  8. C语言的main函数,究竟有几种写法?
  9. html jq移到出现内容,jquery操作html元素之( 获得内容和属性)
  10. python脚本语言采用声音作为手段_LKJ自动化测试脚本定义及生成技术研究