本章聚焦两个最频繁的发射动作:genFunctionWrapper()(函数/方法 → C++ 函数)与 genClassWrapper()(类/接口/枚举 → C++ 类与 zend_class_entry 注册)。
Sources: src/Translator.php
genFunctionDeclarations() 为每个 FunctionDef 生成前向声明,规则包括:
php::Object &this_;trait 父类场景追加 zend_class_entry *trait_parent_ce;php::Array 并附默认参数表达式;typephp_multi_return 命名空间再生成一份返回元组版本(hasMultiReturn());hot/cold 加 TYPEPHP_HOT_ATTRIBUTE / TYPEPHP_COLD_ATTRIBUTE;TYPEPHP_<LIB>_IMPORT 宏,库导出函数用 TYPEPHP_<NAME>_API。Sources: src/Translator.php
genClassWrapper() 为每个 ClassDef / InterfaceDef 生成:
php::setStaticProperty);create_object 钩子与属性处理器安装(genClassPropertyInit());genClassArrayConstants())。属性初始化分两种情况(src/Translator.php):
php::Var 写入属性表;ArrayInitPlan 生成构造表达式,避免重复求值。Sources: src/Translator.php · src/Preprocessor.php
genClassCeList() 用 marcj/topsort 按继承依赖拓扑排序生成 zend_class_entry 注册顺序,确保父类先于子类注册;内置类/接口(不在符号表中)直接加入排序而不参与依赖解析。
Sources: src/Translator.php