PHP代码运行流程.doc_第1页
PHP代码运行流程.doc_第2页
PHP代码运行流程.doc_第3页
PHP代码运行流程.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP代码运行流程 PHP最初于1994年开始设计。1995年发布第一版,定名为PHPTools,提供了留言本、计数器等简单功能。下面是分享的PHP代码运行流程,欢迎大家参考! PHP代码运行流程 Opcode是一种php脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL,举个例子,比如你写下了如下的PHP代码: PHP执行这段代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend) 1.Scanning(Lexing),将PHP代码转换为语言片段(Tokens)2.Parsing,将Tokens转换成简单而有意义的表达式3.Compilation,将表达式编译成Opocdes4.Execution,顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。 题外话:现在有的Cache比如APC,可以使得PHP缓存住Opcodes,这样,每次有请求来临的时候,就不需要重复执行前面3步,从而能大幅的提高PHP的执行速度。 那什么是Lexing?学过编译原理的同学都应该对编译原理中的词法分析步骤有所了解,Lex就是一个词法分析的依据表。Zend/zend_language_scanner.c会根据Zend/zend_language_scanner.l(Lex文件),来输入的PHP代码进行词法分析,从而得到一个一个的“词”,PHP4.2开始提供了一个函数叫token_get_all,这个函数就可以讲一段PHP代码Scanning成Tokens; 如果用这个函数处理我们开头提到的PHP代码,将会得到如下结果: Array(0=Array(0=3671=Array(0=3161=echo)2=Array(0=3701=)3=Array(0=3151=HelloWorld)4=;5=Array(0=3701=)6=7=Array(0=3701=)8=Array(0=3051=1)9=Array(0=3701=)10=+11=Array(0=3701=)12=Array(0=3051=1)13=;14=Array(0=3701=)15=Array(0=3161=echo)16=Array(0=3701=)17=;) 分析这个返回结果我们可以发现,源码中的字符串,字符,空格,都会原样返回。每个源代码中的字符,都会出现在相应的顺序处。而,其他的比如标签,操作符,语句,都会被转换成一个包含俩部分的Array:TokenID(也就是在Zend内部的改Token的对应码,比如,T_ECHO,T_STRING),和源码中的原来的内容。 接下来,就是Parsing阶段了,Parsing首先会丢弃TokensArray中的多于的空格,然后将剩余的Tokens转换成一个一个的简单的表达式 1.echoaconstantstring2.addtwonumberstogether3.storetheresultofthepriorexpressiontoavariable4.echoavariable 然后就改Compilation阶段了,它会把Tokens编译成一个个op_array,每个op_arrayd包含如下5个部分: 1.Opcode数字的标识,指明了每个op_array的操作类型,比如add,echo2.结果存放Opcode结果3.操作数1给Opcode的操作数4.操作数25.扩展值1个整形用来区别被重载的操作符 比如,我们的PHP代码会被Parsing成: *ZEND_ECHOHelloWorld*ZEND_ADD011*ZEND_ASSIGN!00*ZEND_ECHO!0 呵呵,你可能会问了,我们的$a去那里了? 恩,这个要介绍操作数了,每个操作数都是由以下俩个部分组成: a)op_type:为IS_CONST,IS_TMP_VAR,IS_VAR,IS_UNUSED,orIS_CVb)u,一个联合体,根据op_type的不同,分别用不同的类型保存了这个操作数的值(const)或者左值(var) 而对于var来说,每个var也不一样 IS_TMP_VAR,顾名思义,这个是一个临时变量,保存一些op_array的结果,以便接下来的op_array使用,这种的操作数的u保存着一个指向变量表的一个句柄(整数),这种操作数一般用开头,比如0,表示变量表的0号的临时变量 IS_VAR这种就是我们一般意义上的变量了,他们以$开头表示 IS_CV表示ZE2.1/PHP5.1以后的编译器使用的一种cache机制,这种变量保存着被它引用的变量的地址

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论