Skip to content

Commit b3a582d

Browse files
committed
Merge branch 'master' of github.com:pangudashu/php7-internal
2 parents fda9bae + e4b4e27 commit b3a582d

File tree

4 files changed

+4
-4
lines changed

4 files changed

+4
-4
lines changed

3/function_implement.md

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

1313
```php
1414
/* function main(){ */

3/zend_compile_opcode.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ void zend_compile_expr(znode *result, zend_ast *ast)
516516
```
517517
>> __第3步:__ 上面两步已经分别生成了变量赋值的op1、op2,下面就是根据这俩值生成opcode的过程。
518518
```c
519-
tatic zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode *op2)
519+
static zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode *op2)
520520
{
521521
zend_op *opline = get_next_op(CG(active_op_array)); //当前zend_op_array下生成一条新的指令
522522
opline->opcode = opcode;

3/zend_executor.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ ZEND_API zend_executor_globals executor_globals;
6262
struct _zend_execute_data {
6363
const zend_op *opline; //指向当前执行的opcode,初始时指向zend_op_array起始位置
6464
zend_execute_data *call; /* current call */
65-
zval *return_value; //返回值指针 */
65+
zval *return_value; //返回值指针
6666
zend_function *func; //当前执行的函数(非函数调用时为空)
6767
zval This; //这个值并不仅仅是面向对象的this,还有另外两个值也通过这个记录:call_info + num_args,分别存在zval.u1.reserved、zval.u2.num_args
6868
zend_class_entry *called_scope; //当前call的类

3/zend_object.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ static int zend_std_compare_objects(zval *o1, zval *o2)
437437
"==="的比较通过函数`zend_is_identical()`处理,比较简单,这里不再展开。
438438

439439
#### 3.4.2.6 对象的销毁
440-
object与string、array等类型不同,它是个符合类型,所以它的销毁过程更加复杂,赋值、函数调用结束或主动unset等操作中如果发现object引用计数为0则将触发销毁动作。
440+
object与string、array等类型不同,它是个复合类型,所以它的销毁过程更加复杂,赋值、函数调用结束或主动unset等操作中如果发现object引用计数为0则将触发销毁动作。
441441
```php
442442
//情况1
443443
$obj1 = new my_function();

0 commit comments

Comments
 (0)