学习来源:http://www.php-internals.com/book/?p=chapt02/02-00-overview

最开始学习PHP的时候感觉上手真的好容易,噼里啪啦一个回车 “Hello word !” 出来了,很少去关注为什么它会出来?只知道语法必须要这样写,少一个分号都会报错。那底层到底是什么东西能够识别PHP语法呢!

其实PHP是一个脚本语言,它不像JAVA,C程序;  而我们编写的代码就是PHP接收的输入数据,是PHP内核对我们编写的代码进行解释和运算, 最后返回相应的运算结果。

然而,PHP与我们自己平时写的一般的C程序有所不同的是, 我们的程序一般用来解决某个具体问题, 而PHP本身实现了把用户的逻辑“翻译”为机器语言来执行的功能, 这也是各种编译语言与承载具体业务逻辑的程序代码的一个明显区别。 于是PHP就多出一个把用户代码“翻译”成具体操作的步骤:词法分析、语法分析。

当用户代码输入给PHP内核去执行的时候, PHP内核会对PHP代码进行词法分析和语法分析, 词法分析是把PHP代码分割成一个个的“单元”(TOKEN), 语法分析则将这些“单元”转化为Zend Engine可执行的操作。 然后PHP内部的Zend Engine对这些操作进行顺次的执行。 Zend Engine是PHP内核的核心部分,负责最终操作的执行和结果的返回, 可以理解成为PHP内核中的“发动机”。

于是PHP代码的执行过程可以简单描述为下图:

PHP内核-代码的执行(二)的更多相关文章

  1. Linux0.11内核剖析--内核代码(kernel)--sched.c

    1.概述 linux/kernel/目录下共包括 10 个 C 语言文件和 2 个汇编语言文件以及一个 kernel 下编译文件的管理配置文件 Makefile.其中三个子目录中代码注释的将放在后面的 ...

  2. debian内核代码执行流程(二)

    继续上一篇文章<debian内核代码执行流程(一)>未完成部分. acpi_bus_init调用acpi_initialize_objects,经过一系列复杂调用后输出下面信息: [ IN ...

  3. debian内核代码执行流程(三)

    接续<debian内核代码执行流程(二)>未完成部分 下面这行输出信息是启动udevd进程产生的输出信息: [ ]: starting version 175是udevd的版本号. 根据& ...

  4. [转] Linux内核代码风格 CodingStyle [CH]

    from:http://blog.csdn.net/jiang_dlut/article/details/8163731 中文版维护者: 张乐 Zhang Le <r0bertz@gentoo. ...

  5. Linux学习笔记:【004】Linux内核代码风格

    Chinese translated version of Documentation/CodingStyle   If you have any comment or update to the c ...

  6. [转] LINUX内核代码编程规范

    这是一个简短的文档,描述了linux内核的首选代码风格.代码风格是因人而异的,而且我 不愿意把我的观点强加给任何人,不过这里所讲述的是我必须要维护的代码所遵守的风格, 并且我也希望绝大多数其他代码也能 ...

  7. 20135202闫佳歆--week2 一个简单的时间片轮转多道程序内核代码及分析

    一个简单的时间片轮转多道程序内核代码及分析 所用代码为课程配套git库中下载得到的. 一.进程的启动 /*出自mymain.c*/ /* start process 0 by task[0] */ p ...

  8. Linux Kernel文件系统写I/O流程代码分析(二)bdi_writeback

    Linux Kernel文件系统写I/O流程代码分析(二)bdi_writeback 上一篇# Linux Kernel文件系统写I/O流程代码分析(一),我们看到Buffered IO,写操作写入到 ...

  9. php课程 1-3 web项目中php、html、js代码的执行顺序是怎样的(详解)

    php课程 1-3 web项目中php.html.js代码的执行顺序是怎样的(详解) 一.总结 一句话总结:b/s结构 总是先执行服务器端的先.js是客户端脚本 ,是最后执行的.所以肯定是php先执行 ...

随机推荐

  1. CDH上Cloudera Management Service 各个角色迁移至其他节点

    1.首先查看Cloudera Management Service下有哪些服务,cdh版本为5.9.2: 可以看到基本上有以上6个角色: 2.停止所有角色,并执行删除: 3.找到集群中另外一个节点,添 ...

  2. Python 学习 第三篇:数组类型(列表、字典和元组)

    列表和字段都可以在原处进行修改,可以按照需求增长或缩短,并且可以包含任何类型的对象或被嵌套.列表和字典存储的是对象的引用,而不是拷贝. 一,列表 列表是有序的序列,每一个列表项的顺序是固定的,这使得列 ...

  3. 利用privoxy劫持http网站数据,插入广告,获取用户名,密码

    看了几篇privoxy的文章,感觉讲的都不详细,在此整理一遍. 注:本文下面的内容仅讨论思路,作为技术交流之用,请勿用作非法途径. Privoxy是一款带过滤功能的代理服务器,针对HTTP.HTTPS ...

  4. Tomcat 基础二

    1.Tomcat 实现了一个新的Servlet容器Catalina: 2.Tomcat:         ROOT         |         |____      /             ...

  5. eclipse中怎么找项目部署的路径和找编译后的class路径

    1.快捷键 ctrl+shift+R,会默认显示你的源文件.java的路径,如果没有.class的话,点击右上角的三角,选中  Show Derived Resource; 2.打开出现下图 3.按下 ...

  6. ANSYS渡槽槽身动水压力的施加(2)——U型渡槽

    U型渡槽动水压力荷载施加命令及说明 程序中需要用到ANSYS重启动,因为需提取前一步加速度结果以施加部分动水压力: 默认Y方向为重力方向,X方向为横槽向,Z方向为纵槽向: 需准备地震波文件: 需先将槽 ...

  7. Unity关于方法事件生命周期官方文档

    http://docs.unity3d.com/Manual/ExecutionOrder.html 一.组件运行的基本顺序 下图中创建类的顺序为A,B,C,A1,二运行的结果为A1,B,C,A. 可 ...

  8. Tomcat源码学习(1)

    Tomcat源码学习(1) IntelliJ IDEA 17.3.3 导入 Tomcat 9.0.6源码 下载源码 tomcat_9.0.6 启动 IDEA. 点击 Open,选择刚才下载的文件解压后 ...

  9. 作业三:LINUX内核的启动过程

    作业三:LINUX内核的启动过程 一.使用GDB跟踪内核从start_kernel到init进程启动(附实验截图) (一)使用自己的Linux系统环境搭建MenuOS的过程 下载内核源代码编译内核 c ...

  10. Daily Scrum - 12/04

    Meeting Minutes 与Qiufeng, Bojie, Zhongqiu, Ran, Travis一起讨论. 确定了最后的UI及Feature. 开始Code Review, 以及有计划的M ...