dilu
2020-04-22 16:46:33 +08:00
为了你这个问题我特意去看了一下 PHP 的源码
大致实现是这样的
```c
void zend_compile_class_decl(zend_ast *ast) /* {{{ */
{
zend_ast_decl *decl = (zend_ast_decl *) ast;
zend_ast *extends_ast = decl->child[0];
zend_ast *implements_ast = decl->child[1];
zend_ast *stmt_ast = decl->child[2];
zend_string *name, *lcname;
zend_class_entry *ce = zend_arena_alloc(&CG(arena), sizeof(zend_class_entry));
zend_op *opline;
znode declare_node, extends_node;
# 省略
}
```
初步判断是:针对 extends 跟 implement 的类,都是指向父类
后面调用的地方太多抱歉没有精力看了
毛估是跟变量之类的一样,没有修改就指向父类,有修改就重新开辟内存。
百度关键词 COW 写时复制