### 编译型语言和解释型语言
- 编译型语言:执行前需要经历编译过程,把源代码编译成机器语言。以后再要运行时,直接使用编译好的文件即可。(c, c++...)
优缺点:(1):一次性编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高
(2):于特定平台相关,可移植性差。
- 解释下语言:使用专门的解释器对源码卓条解释成中间语言,再将中间语言文件交给其他过程处理或直接交给机器执行。对于常见的编译步骤分为:词法分析->语法分析->代码优化和字节生成。
如php执行经过:将PHP代码经过词法分析转换成语言片段(Tokens)->将Tokens经过语法分析转换成有意义的表达式(AST抽象语法树)->再将抽象语法树经过编译过程编译成opcodes(这就是中间语言)->顺次的执行opcodes(物理机器无法识别opcodes,因此需要zend虚拟机)

### php执行过程
1. Scanning(Lexing)对PHP源码进行词法分析,将源代码切割为多个字符串单元,分割后的字符串成为Token
2. Parsing 将Token进行语法分析,转换成抽象语法树(AST)
3. Compilation AST经过编译器编译成机器指令(PHP定义的一组指令表示,每个指令对应响应的处理函数),这些机器指令为Opcodes。(这里说的编译器不同与编译型语言中的编译器,AST经过编译器被编译成能被解释执行的指令,而不是汇编代码)
4. Execution zend虚拟机依次执行Opcodes,这个执行过程就是找到指令对应的处理函数,执行其中的代码

> 现在的php可以将Opcodes缓存住,从而不必每次执行前3步,除非PHP检测到代码发生了改变。从而很大程度上提高了PHP的执行效率。在php.ini配置文件中可以开启或者关闭Opcodes缓存`opcache.enable=1`
### 指令
Zend虚拟机的指令称为opline,每条指令对应一个opcode.PHP代码在编译后生成opline,Zend虚拟机根据不同的opline完成PHP代码的执行,opline由操作指令,操作数和返回值组成,与机器指令非常类似.
opline对应的结构体
```
struct _zend_op {
handler, // 操作执行的函数
op1, // 操作数1
op2, // 操作数2
result, // 返回值
}
```
- linux 基础
- ln 链接
- linux 环境变量
- linux 进程查看
- nginx
- redis
- redis 安装
- php 底层原理
- php源码编译安装
- phpize文件
- php命令行
- php7 新特性
- php7 变量
- php7 生命周期
- php sapi运行模式
- php 内存管理
- php 运行机制和Zend虚拟机
- php垃圾回收
- php 基础
- php.ini
- php函数
- 面向对象
- php 文件上传
- ob缓冲和页面静态化
- php中的session
- php cURL扩展
- composer 应用
- php 错误和异常
- thinkphp
- tp6容器和依赖注入
- tp6 的服务
- tp6事件
- tp6 多应用
- tp6路由
- tp6 cache
- tp6 request
- tp6 中间件
- tp6 response
- tp6 Db
- 备忘录
- 数据库表