php基本概念:服务端脚本语言,底层是由c实现的
php语言的整体架构:
- Application:php程序
- SAPI:服务端应用编程接口(让php和外围交换数据[PHP通过mod_php5.so模块和Apache相连])
- Extensions扩展(扩展库)
- Zend引擎(将php翻译成一种叫opcode的中间语言){实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心}
- 执行流程:
- 词法分析,将php代码转换成语言片段
- 语法分析,转化成有意义的表达式
- 将表达式编译成opcode
- 执行opcode
cgi、php-cgi、fastcgi、php-fpm关系:
- Web Server 一般指Apache、Nginx、IIS、Lighttpd、Tomcat等服务器,
- Web Application 一般指PHP、Java、Asp.net等应用程序。
- CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。
- FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。
- PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。
- PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。
swoole为什么可以加速
swoole解决了重复加载文件的问题,还提供了其他功能(协程)
require和include的区别
require:发出警告报错,后续程序不会执行
include:发出警告,后续程序会执行
include_once、require_once:不确定文件是否被加载的时候用
垃圾回收机制(释放的是堆内存,因为栈是内存地址)
目的:是一种动态的储存分配方案
申请流程:
- 每一个内存对象都会分配一个计数器
- 被引用+1,撤销unset后-1
- 当计算器值=0,对他进行摧毁
php的自动加载原理和实现分类
spl_autoload_register:自定义的加载方法,可以加载多次(推荐使用)
__autoload():系统提供,不能改,..只能加载一次
有异曲同工之妙
composer加载php文件的原理
namespace=》文件目录的映射
- 通过composer.json的autoload->psr4对地址进行映射绑定,记录在autoload_psr4文件,通过autoload_static记录命名空间的规则(长度记录)
- 在使用的时候,composer核心代码底层中通过spl_autoload_register加载不同组建的命名规则