news 2026/6/9 12:22:29

PHP扩展开发C基础教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP扩展开发C基础教程

PHP扩展开发C基础教程

PHP扩展是用C或C++写的动态库。扩展可以提升性能或调用底层库。今天说说PHP扩展开发的基础知识。

一个最简单的扩展函数。

```c
// hello.c
#include

PHP_FUNCTION(hello_from_c) {
RETURN_STRINGL("Hello from C!", 13);
}

const zend_function_entry hello_functions[] = {
PHP_FE(hello_from_c, NULL)
PHP_FE_END
};

zend_module_entry hello_module_entry = {
STANDARD_MODULE_HEADER,
"hello",
hello_functions,
NULL, NULL, NULL, NULL, NULL,
"1.0.0",
STANDARD_MODULE_PROPERTIES
};

ZEND_GET_MODULE(hello_module_entry)
```

编译安装后在PHP里调用。

```php
echo hello_from_c();
?>

用PHP-CPP扩展库更方便。

```cpp
#include

class Calculator : public Php::Base {
public:
Php::Value add(Php::Parameters& params) {
return params[0].numericValue() + params[1].numericValue();
}

Php::Value factorial(Php::Parameters& params) {
int n = params[0].numericValue();
long result = 1;
for (int i = 2; i <= n; i++) result *= i;
return result;
}
};

extern "C" {
PHPCPP_EXPORT void *get_module() {
static Php::Extension ext("calc", "1.0.0");
ext.add("Calculator");
ext.add("Calculator::add", &Calculator::add);
ext.add("Calculator::factorial", &Calculator::factorial);
return ext;
}
}
```

PHP端调用。

```php
$calc = new Calculator();
echo $calc->add(10, 20) . "\n";
echo $calc->factorial(10) . "\n";
?>

扩展开发需要了解PHP的zval和HashTable结构。

```c
// 操作PHP数组
PHP_FUNCTION(cpp_array_sum) {
zval *arr;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "a", &arr) == FAILURE) {
RETURN_FALSE;
}

double sum = 0.0;
HashTable *ht = Z_ARRVAL_P(arr);
zval *val;

ZEND_HASH_FOREACH_VAL(ht, val) {
switch (Z_TYPE_P(val)) {
case IS_LONG: sum += Z_LVAL_P(val); break;
case IS_DOUBLE: sum += Z_DVAL_P(val); break;
default: break;
}
} ZEND_HASH_FOREACH_END();

RETURN_DOUBLE(sum);
}
```

扩展开发的场景。性能关键的计算可以用C加速,调用已有的C/C++库,给PHP增加系统级能力。大部分PHP项目不需要写扩展,内置函数已经够用了。写扩展主要是为了理解PHP底层工作原理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 12:21:44

Linux进程(入门)个人笔记

冯诺依曼体系结构计算机大多遵守冯诺依曼体系结构各部件说明输入单元&#xff1a;键盘&#xff0c;摄像头&#xff0c;麦克风&#xff0c;磁盘等中央处理器(CPU)&#xff1a;含有运算器和控制器等&#xff0c;运算器进行数据计算任务&#xff0c;运算又分为算术运算和逻辑运算&…

作者头像 李华
网站建设 2026/6/9 12:21:28

i.MX 6SoloX引脚分配与封装选型实战:规避硬件设计深坑

1. 项目概述&#xff1a;为什么引脚分配是嵌入式设计的“命门”在嵌入式硬件设计的江湖里&#xff0c;选型一颗功能强大的处理器只是第一步&#xff0c;真正的“硬仗”往往从看懂那颗芯片底部密密麻麻的焊球&#xff08;BGA&#xff09;开始。我见过不少项目&#xff0c;原理图…

作者头像 李华
网站建设 2026/6/9 12:21:24

5分钟快速上手:Translumo实时屏幕翻译工具完整指南

5分钟快速上手&#xff1a;Translumo实时屏幕翻译工具完整指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 还在为外语…

作者头像 李华
网站建设 2026/6/9 12:18:14

MATLAB版平面连杆静力学求解工具集(RRR/RRP/RPR三类机构)

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;一套开箱即用的MATLAB静力学分析工具&#xff0c;包含fRRR.m、fRRP.m、fRPR.m三个核心函数&#xff0c;分别对应三类典型平面连杆机构&#xff1a;双曲柄&#xff08;RRR&#xff09;、曲柄滑块&#xff08;RRP…

作者头像 李华