# PHPX 编译器 - C++ 函数导出规范 ## 概述 在 PHPX 编译器中,C++ 函数可以被导出为 PHP 函数,供 PHP 代码调用。这需要遵循特定的规范和约定。 ## 三大必要条件 ### 1. 函数名必须以 `php_` 为前缀 ```cpp // ✅ 正确:以 php_ 为前缀 Int php_messagebox(Int hWnd, String text, String caption, Int uType) { // 实现代码 } // ❌ 错误:缺少 php_ 前缀 Int messagebox(Int hWnd, String text, String caption, Int uType) { // 这不会被导出到 PHP } ``` **命名规则:** - C++ 函数名:`php_messagebox()` - PHP 调用名:`messagebox()`(自动去掉 `php_` 前缀) ### 2. 只能使用 PHPX 类型作为参数和返回值 **支持的 PHPX 类型:** | PHPX 类型 | PHP 对应类型 | 说明 | |-----------|-------------|------| | `Int` | `int` | 整数 | | `Bool` | `bool` | 布尔值 | | `Double` | `float` | 浮点数 | | `String` | `string` | 字符串 | | `Array` | `array` | 数组 | | `Object` | `object` | 对象 | | `Variant` | `mixed` | 混合类型 | | `void` | 无返回值 | 仅用于返回值 | ```cpp // ✅ 正确:使用 PHPX 类型 Int php_add(Int a, Int b) { return a + b; } String php_greet(String name) { return "Hello, " + name + "!"; } // ❌ 错误:使用原生 C/C++ 类型 int php_add(int a, int b) { // 错误! return a + b; } char* php_greet(char* name) { // 错误! return name; } ``` ### 3. 必须在 `.stub.php` 文件中声明 **Stub 文件的作用:** - 只包含函数签名(参数和返回值类型) - 不包含具体实现代码 - 让编译器知道有哪些 C++ 函数可供 PHP 调用 **Stub 文件示例** (`winapi.stub.php`): ```php using namespace php; // 注意:函数名必须以 php_ 为前缀 Int php_add(Int a, Int b) { return a + b; } String php_concat(String str1, String str2) { return str1 + str2; } Bool php_is_even(Int number) { return (number % 2 == 0); } ``` ### 3. PHP 调用文件 (`main.php`) ```php