以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运行机制和原理的更多相关文章

  1. 【PHP+nginx+php-fpm】探讨它们的运行机制和原理

    1.PHP+nginx+php-fpm的运行机制和原理 Nginx 是非阻塞IO & IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求.(非阻塞, ...

  2. PHP的运行机制与原理(底层) [转]

    说到php的运行机制还要先给大家介绍php的模块,PHP总共有三个模块:内核.Zend引擎.以及扩展层:PHP内核用来处理请求.文件流.错误处理等相关操作:Zend引擎(ZE)用以将源文件转换成机器语 ...

  3. PHP的运行机制与原理(底层)

    原文:http://www.jb51.net/article/74907.htm 说到php的运行机制还要先给大家介绍php的模块,PHP总共有三个模块:内核.Zend引擎.以及扩展层:PHP内核用来 ...

  4. PHP 底层的运行机制与原理

    PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...

  5. PHP底层的运行机制与原理

    PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...

  6. PHP 底层的运行机制与原理 --转

    发现一片总结的还不错的文章,记录一下 PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现 ...

  7. PHP底层运行机制与原理

    PHP的设计理念及特点 多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,时代发展,PHP也早已支持多线程模型. 弱类型语言:和C/C++.J ...

  8. jQuery的内部运行机制和原理

    jQuery的优点: jQuery是一个非常优秀的JavaScript库,与Prototype,YUI,Mootools等众多的Js类库相比,它剑走偏锋,从Web开发实用的角度出发,抛除了其它Lib中 ...

  9. php底层的运行机制和原理

    php设计的理念及特点 PHP 被设计为一种适用于web开发的动态脚本语言,同时具有解释型和弱类型,底层完全由C语言实现. 解释型即程序边运行边解释,一行一行运行. 弱类型即变量类型一开始并不是确定的 ...

  10. spring mvc 框架运行机制 + 数据绑定原理

    spring mvc 运行主要的组件: 1 前端控制器 (dispatchservlet) 相当于一个重要处理器,它用来调用其他功能模块来分工的效应一次请求,主要起调度的作用. 2. handler ...

随机推荐

  1. centos7.2下查看的java版本号

    1,centos7.2下查看的java版本号 java -version

  2. golang 不足

    滴滴出行技术总监:关于技术选型的那些事儿 原创: 杜欢 InfoQ 2017-02-26   https://mp.weixin.qq.com/s/6EtLzMhdtQijRA7Xrn_pTg     ...

  3. nginx限制流量

    location /download/ { limit_rate_after 5m; limit_rate 1m; alias /data/html/; }

  4. 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 - ...

  5. Redis学习笔记——Redis的基本操作

    之前介绍过如何在ubuntu安装Redis服务器:https://www.cnblogs.com/zifeiy/p/9062738.html 接下来,我们在Redis上进行一些基本的操作. 所县使用命 ...

  6. python迭代器、生成器、装饰器之生成器

    python中只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码,通过__next__()或者next()函数可以获取值,每调用一次,都会取出一个值,无值 ...

  7. [c++]struct timeval

    struct timeval { time_t tv_sec; // seconds long tv_usec; // microseconds }; re 1. struct timespec 和 ...

  8. iOS-UINavigationController多控制器管理

    UINavigationController 7.8.1 添加子控制器进栈 UINavigationController *nav = [[UINavigationController alloc]  ...

  9. ROS下gazebo打开出现问题

    通常情况下,在装完ros后,打开gazebo, 会出现无法连接服务器获取模型的情况.这样,我们打开gazebo, 终端会提示timeout,gazebo界面没有网格. 这是因为服务器网站地址好像已经换 ...

  10. Java与计算机常识

    DB2   IBM公司的数据库 Oracle  Orcle的数据库 Mysql    数据库(免费) 1.  jetty    小型服务器(类似于tomcat) Jetty 是一个开源的servlet ...