php网页执行流程,PHP 的执行流程

PHP 与 C 语言不同,他是一个解释型语言,PHP 本身实现了将用户代码翻译为机器语言执行的功能,这个翻译过程包含了词法分析与语法分析两个过程

完成词法分析、语法分析后,PHP 代码被转化为 Zend 引擎可以执行的操作,然后 Zend 引擎就可以对这些操作进行顺次执行

Zend 引擎是 PHP 内核的核心部分,负责最终操作的执行和结果的返回

词法分析

词法分析的工作是将用户代码切分成一个个单元(TOKEN)

PHP 的词法分析器是通过 lex 生成的,此法规则文件是 $PHP_SRC/Zend/zend_language_scanner.l

通过调用 token_get_all 可以查看这一阶段产生的分词结果

$a = "<?php

echo 'hello world';

?>";

var_dump(token_get_all($a));

?>

运行结果为:

array(7) {

[0] =>

array(3) {

[0] =>

int(372)

[1] =>

string(6) "<?php

"

[2] =>

int(1)

}

[1] =>

array(3) {

[0] =>

int(316)

[1] =>

string(4) "echo"

[2] =>

int(2)

}

[2] =>

array(3) {

[0] =>

int(375)

[1] =>

string(1) " "

[2] =>

int(2)

}

[3] =>

array(3) {

[0] =>

int(315)

[1] =>

string(13) "'hello world'"

[2] =>

int(2)

}

[4] =>

string(1) ";"

[5] =>

array(3) {

[0] =>

int(375)

[1] =>

string(1) "

"

[2] =>

int(2)

}

[6] =>

array(3) {

[0] =>

int(374)

[1] =>

string(2) "?>"

[2] =>

int(3)

}

}

语法分析

语法分析产生了 Zend 引擎可以处理的操作数

PHP 的语法分析器是通过 bison 生成的,规则文件是 $PHP_SRC/Zend/zend_language_parser.y

bison 根据规则生成操作数,然后由 Zend 引擎进行编译,将代码便以为 opcode,然后 Zend 引擎回去执行这些 opcode,当然,在执行这些 opcode 的过程中可能还需要反复进行编译和执行的过程

如果在语法分析的过程中出现了不符合语法规则的情况,则会输出错误信息

示例 -- echo 的执行

echo 'hello world';

?>

这段简单的代码的执行过程中进行了哪些操作呢?

首先,在上面的介绍中,词法分析阶段生成了 7 个 token

然后,由语法分析器对着 7 个 token 进行分析,得到一条 ZEND_ECHO 指令

该指令由 C 语言的函数 zend_print_variable(zval *z) 执行,他的功能就是将传递进来的字符串打印出来

5b40e7b8116905d7dd7361c83eb6a592.png?id=3377590&v=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值