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 ...
随机推荐
- Hive和Hadoop
我最近研究了hive的相关技术,有点心得,这里和大家分享下. 首先我们要知道hive到底是做什么的.下面这几段文字很好的描述了hive的特性: 1.hive是基于Hadoop的一个数据仓库工具,可以将 ...
- Git .gitignore中已添加文件路径,但仍未被忽略
当文件之前已经被提交到仓库后,后面即使将文件路径添加到 .gitignore ,使用 git status 命令,依然会看到文件被修改. $ git status 位于分支 master 您的分支与上 ...
- Flutter移动电商实战 --(39)路由_Fluro的路由配置和静态化
handler只是单个路由的配置,这节课我们要学习路由的整体配置 整体配置 新建routers.dart文件来做整体配置 detailsHandler就是我们在router_handler里面定义的d ...
- python小白之矩阵matrix笔记(updating)
Matrix #python学习之矩阵matrix 2018.4.18 # -*- coding: UTF-8 -*- from numpy import * import numpy as np i ...
- webpack概述——资源、样式、图片的打包工具
官方地址:https://www.webpackjs.com/ Concepts At its core, webpack is a static module bundler for modern ...
- @Component默认是单例还是多例?
@Component默认是单例还是多例? 答: @Component注解默认实例化的对象是单例,如果想声明成多例对象可以使用@Scope("prototype") @Repos ...
- Jmeter响应断言--正则表达式判断纯数字
如图所示,这样是匹配14位数字,如果响应是纯数字可以直接用上
- 学习 TTreeView [15] - 连接数据库 (作为给 "丁永其" 和 "DELPHI万岁" 两位朋友的回复)
本例效果图: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Contro ...
- Go 自定义包引入报错
配置文件 GO111MODULE=on 设置为on时,go命令行会使用modules,而一点也不会去GOPATH目录下查找.但自定义包在 $GOPATH/github.com/winyh/strrev ...
- 【Leetcode_easy】643. Maximum Average Subarray I
problem 643. Maximum Average Subarray I 题意:一定长度的子数组的最大平均值. solution1:计算子数组之后的常用方法是建立累加数组,然后再计算任意一定长度 ...