PHP运行机制和原理
以echo "Hello World";为例
经历五个步骤:
1、扫描(scanning):先进行语法分析和词法分析,然后将index.php内容变成一个个语言片段(token array)
2、解析(parsing):词法分析后,就需要根据一个个token去组成有意义的表达式
Parsing首先会丢弃Tokens Array中的多余的空格,然后将剩余的Tokens转换成一个一个的简单的表达式
3、编译(complication):将表达式编译成中间码(opcode)
4、执行(execution):将中间码一条一条的执行
5、输出(output buffer):将要输出的额内容输出到缓冲区
下面代码可以看到语法分析和词法分析时生成的token
$code = <<<'PHP_CODE'
<?php
echo 'Hello World';
PHP_CODE;
echo "<pre>";
print_r(token_get_all($code));
输出结果为:
Array
(
[0] => Array
(
[0] => 376
[1] => 1
)
[1] => Array
(
[0] => 319 //tokenid,也就是“词”id
[1] => echo //“词”具体的内容
[2] => 2 //所在的位置,行数
)
[2] => Array
(
[0] => 379
[1] =>
[2] => 2
)
[3] => Array
(
[0] => 318
[1] => 'Hello World'
[2] => 2
)
[4] => ;
)
分析这个返回结果我们可以发现,源码中的字符串,字符,空格,都会原样返回。每个代码中的字符,都会出现在相应的顺序处。
提高PHP代码运行效率:
- 压缩代码,去除无用的注释或空白(因为底层不管是空白还是注释都会原样返回)
- 尽量使用php内置函数或扩展函数
- 用apc/xcache/opcache等缓存php的opcode
- 缓存复杂和耗时运算的结果
- 能异步处理的任务不要马上处理,如发邮件(php是单线程)
PHP运行机制和原理的更多相关文章
- 【PHP+nginx+php-fpm】探讨它们的运行机制和原理
1.PHP+nginx+php-fpm的运行机制和原理 Nginx 是非阻塞IO & IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求.(非阻塞, ...
- PHP的运行机制与原理(底层) [转]
说到php的运行机制还要先给大家介绍php的模块,PHP总共有三个模块:内核.Zend引擎.以及扩展层:PHP内核用来处理请求.文件流.错误处理等相关操作:Zend引擎(ZE)用以将源文件转换成机器语 ...
- PHP的运行机制与原理(底层)
原文:http://www.jb51.net/article/74907.htm 说到php的运行机制还要先给大家介绍php的模块,PHP总共有三个模块:内核.Zend引擎.以及扩展层:PHP内核用来 ...
- PHP 底层的运行机制与原理
PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...
- PHP底层的运行机制与原理
PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...
- PHP 底层的运行机制与原理 --转
发现一片总结的还不错的文章,记录一下 PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现 ...
- PHP底层运行机制与原理
PHP的设计理念及特点 多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,时代发展,PHP也早已支持多线程模型. 弱类型语言:和C/C++.J ...
- jQuery的内部运行机制和原理
jQuery的优点: jQuery是一个非常优秀的JavaScript库,与Prototype,YUI,Mootools等众多的Js类库相比,它剑走偏锋,从Web开发实用的角度出发,抛除了其它Lib中 ...
- php底层的运行机制和原理
php设计的理念及特点 PHP 被设计为一种适用于web开发的动态脚本语言,同时具有解释型和弱类型,底层完全由C语言实现. 解释型即程序边运行边解释,一行一行运行. 弱类型即变量类型一开始并不是确定的 ...
- spring mvc 框架运行机制 + 数据绑定原理
spring mvc 运行主要的组件: 1 前端控制器 (dispatchservlet) 相当于一个重要处理器,它用来调用其他功能模块来分工的效应一次请求,主要起调度的作用. 2. handler ...
随机推荐
- centos7.2下查看的java版本号
1,centos7.2下查看的java版本号 java -version
- golang 不足
滴滴出行技术总监:关于技术选型的那些事儿 原创: 杜欢 InfoQ 2017-02-26 https://mp.weixin.qq.com/s/6EtLzMhdtQijRA7Xrn_pTg ...
- nginx限制流量
location /download/ { limit_rate_after 5m; limit_rate 1m; alias /data/html/; }
- nmealib-0.5.3 问题 Build Error: undefined reference to `ceil'
When building on Ubuntu 12.x the build fails with the following error… gcc samples/generate/main.o - ...
- Redis学习笔记——Redis的基本操作
之前介绍过如何在ubuntu安装Redis服务器:https://www.cnblogs.com/zifeiy/p/9062738.html 接下来,我们在Redis上进行一些基本的操作. 所县使用命 ...
- python迭代器、生成器、装饰器之生成器
python中只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码,通过__next__()或者next()函数可以获取值,每调用一次,都会取出一个值,无值 ...
- [c++]struct timeval
struct timeval { time_t tv_sec; // seconds long tv_usec; // microseconds }; re 1. struct timespec 和 ...
- iOS-UINavigationController多控制器管理
UINavigationController 7.8.1 添加子控制器进栈 UINavigationController *nav = [[UINavigationController alloc] ...
- ROS下gazebo打开出现问题
通常情况下,在装完ros后,打开gazebo, 会出现无法连接服务器获取模型的情况.这样,我们打开gazebo, 终端会提示timeout,gazebo界面没有网格. 这是因为服务器网站地址好像已经换 ...
- Java与计算机常识
DB2 IBM公司的数据库 Oracle Orcle的数据库 Mysql 数据库(免费) 1. jetty 小型服务器(类似于tomcat) Jetty 是一个开源的servlet ...