php8提供了非常方便的扩展函数或类参数信息的生成工具。 只需要维护一份 毫无疑问,这种方式,又降低了广大 上手体验: 生成扩展骨架。 立即学习“PHP免费学习笔记(深入)”; 随便添加一个函数,更改 重新生成 Flex是一个基于组件的开发框架,可以生成一个由Flash Player运行的富互联网应用程序。Flex将基于标准的语言和各种可扩展用户界面及数据访问组件结合起来,使得开发人员能够构建具有丰富数据演示、强大客户端逻辑和集成多媒体的应用程序。 Flex是一个建立在Flash平台上的富客户端应用开发工具包,Flex 作为富 Internet 应用(RIA)时代的新技术代表,自从 2007 年 Adobe 公司将其开源以来,Flex 就以前所未有的速度在成长。感兴趣的朋友可以过来看看 相关 commit 可以 点击这儿(https://github.com/php/php-src/compare/master...nikic:php-stubs) 写个简单的扩展举例,通过php扩展的方式来实现python中的 加入 查看是否成功 PHP8新增了蛮多有用的宏和特性。xyz.stub.php,就可以使用工具生成 xyz_arginfo.h。phper 开发扩展的门槛,更易维护。cd ext
php ext_skel.php --ext test
test.stub.php。<?php
/** @generate-function-entries */
function test1(): void {}
function test2(string $str = ""): string {}
function test3(int $integer = 123): int {}test_arginfo.h。
php ../../build/gen_stub.php test.stub.php
all和 any函数。准备工作。
生成扩展骨架。
cd ext
php ext_skel.php --ext python
撰写函数原型,编辑
python.stub.php。<?php
/** @generate-function-entries */
function all(array $arr): bool {}
function any(array $arr): bool {}根据
python.stub.php 生成 python_arginfo.h。php ../../build/gen_stub.php python.stub.php
实现函数逻辑,编辑
python.c。PHP_FUNCTION(all)
{
zval *input;
zval *item;
int result = 1, item_result = 1;
HashTable *htbl;
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_ARRAY(input)
ZEND_PARSE_PARAMETERS_END();
htbl = Z_ARRVAL_P(input);
ZEND_HASH_FOREACH_VAL(htbl, item) {
item_result = zend_is_true(item);
result &= item_result;
} ZEND_HASH_FOREACH_END();
RETURN_BOOL(result);
}
/* {{{ void any() */
PHP_FUNCTION(any)
{
zval *input;
zval *item;
int result = 0, item_result = 0;
HashTable *htbl;
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_ARRAY(input)
ZEND_PARSE_PARAMETERS_END();
htbl = Z_ARRVAL_P(input);
ZEND_HASH_FOREACH_VAL(htbl, item) {
item_result = zend_is_true(item);
result |= item_result;
} ZEND_HASH_FOREACH_END();
RETURN_BOOL(result);
}编写单元测试,编辑
002.phpt和003.phpt, 新建 004.phpt和005.phpt。--TEST--
Check all function true case
--SKIPIF--
<?php
if (!extension_loaded('python')) {
echo 'skip';
}
?>
--FILE--
<?php
var_dump(all([]));
var_dump(all([1]));
var_dump(all([-1, 1, '1']));
?>
--EXPECT--
bool(true)
bool(true)
bool(true)--TEST--
Check all function false case
--SKIPIF--
<?php
if (!extension_loaded('python')) {
echo 'skip';
}
?>
--FILE--
<?php
var_dump(all(['0']));
var_dump(all([0]));
var_dump(all(['']));
var_dump(all([false]));
var_dump(all([1, -1, 100, false]));
var_dump(all([0, -1, 100, 1]));
var_dump(all(['1', -1, '', 100, 1]));
?>
--EXPECT--
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)--TEST--
Check any function true case
--SKIPIF--
<?php
if (!extension_loaded('python')) {
echo 'skip';
}
?>
--FILE--
<?php
var_dump(any(['a', 'b', 'c', 'd']));
var_dump(any([['a', 'b', '', 'd']]));
var_dump(any([['', 'b', 'c', 'd']]));
var_dump(any([['a', 'b', 'c', '']]));
?>
--EXPECT--
bool(true)
bool(true)
bool(true)
bool(true)--TEST--
Check all function false case
--SKIPIF--
<?php
if (!extension_loaded('python')) {
echo 'skip';
}
?>
--FILE--
<?php
var_dump(any(['0']));
var_dump(any([0]));
var_dump(any(['']));
var_dump(any([false]));
var_dump(any([0, '0', '', false]));
?>
--EXPECT--
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)编译、测试和安装
./configure && make
make test
sudo make install
加入到php.ini
php -i | grep ini # 定位你的php.ini文件
extension=python.so
php -m | grep python
实测
php -r "var_dump(all([]));“
php -r "var_dump(any([]));"
0
0
相关文章
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。
48
2026.02.28
Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。
44
2026.02.28
Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。
37
2026.02.28
本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。
22
2026.02.27
本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。
19
2026.02.27
本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。
3
2026.02.27
AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。
430
2026.02.27
热门下载
相关下载
精品课程
共37课时 | 1.9万人学习
共4课时 | 0.6万人学习
共35课时 | 32.2万人学习



