Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 3/function_implement.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ function my_func(){
...
}
```
汇编中函数对应的是一组独立的汇编指令,然后通过call指令实现函数的调用前面已经说过PHP编译的结果是opcode数组,与汇编指令对应PHP用户自定义函数的实现就是将函数编译为独立的opcode数组,调用时分配独立的执行栈依次执行opcode,所以自定义函数对于zend而言并没有什么特别之处,只是将opcode进行了打包封装,实际PHP脚本中函数之外的指令整个可以认为是一个函数(或者理解为main函数更直观)。
汇编中函数对应的是一组独立的汇编指令,然后通过call指令实现函数的调用前面已经说过PHP编译的结果是opcode数组,与汇编指令对应PHP用户自定义函数的实现就是将函数编译为独立的opcode数组,调用时分配独立的执行栈依次执行opcode,所以自定义函数对于zend而言并没有什么特别之处,只是将opcode进行了打包封装。PHP脚本中函数之外的指令,整个可以认为是一个函数(或者理解为main函数更直观)。

```php
/* function main(){ */
Expand Down
2 changes: 1 addition & 1 deletion 3/zend_compile_opcode.md
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,7 @@ void zend_compile_expr(znode *result, zend_ast *ast)
```
>> __第3步:__ 上面两步已经分别生成了变量赋值的op1、op2,下面就是根据这俩值生成opcode的过程。
```c
tatic zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode *op2)
static zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode *op2)
{
zend_op *opline = get_next_op(CG(active_op_array)); //当前zend_op_array下生成一条新的指令
opline->opcode = opcode;
Expand Down