【PHP开发】PHPY:PHP与Python无缝融合,开启跨语言开发新纪元!

news/2025/3/26 17:54:53/文章来源:https://www.cnblogs.com/o-O-oO/p/18790408

概述:PHPY——PHP与Python的桥梁

PHPY 是识沃团队推出的开源项目,旨在为 PHP 引入 Python 生态,弥补 PHP 生态的不足。通过 PHPY,PHP 开发者可以直接调用 Python 的模块和函数,极大地扩展了 PHP 的功能边界。

自发布以来,PHPY 获得了国内外开发者的一致好评,并在多个场景中得到了验证。

经过一年的迭代,PHPY 修复了大量内存泄漏和崩溃问题,并新增了许多强大的特性。本文将详细介绍这些新特性。

一、新特性一览

1.1 with 语法:Python 风格的资源管理

PHPY 引入了 PyWith 语法,允许 PHP 开发者使用与 Python 完全一致的 with 语句,简化资源管理。

【Python 示例】

with open(file, 'wb') as fp:fp.write(some_bytes)

【PHP 示例】

PyWith(function ($fp) use ($bytes) {$fp->write($bytes);
}, PyCore::open($tmpname, 'wb'));

1.2 Socket 句柄互传:无缝网络通信

PHPY 支持 Python Socket 对象与 PHP Stream 资源的互相转换,极大地方便了网络编程。

【Python 转 PHP】

$socket = PyCore::import('socket');
$client = $socket->socket($socket->AF_INET, $socket->SOCK_STREAM);
$client->connect(PyCore::tuple([HOST, PORT]));$fp = fopen('php://fd/' . $client->fileno(), 'rw');
fwrite($fp, $msg);
$data = fread($fp, 1024);
fclose($fp);

【PHP 转 Python】

$fp = stream_socket_client("tcp://$HOST:$PORT", $errno, $errstr, 30);
$client = $socket->fromfd(PyCore::fileno($fp), $socket->AF_INET, $socket->SOCK_STREAM);
fclose($fp);

1.3 异常处理:PHP 异常传递到 Python

PHPY 支持将 PHP 层的异常传递到 Python 层,实现跨语言的异常捕获。

【PHP 示例】

$message = $m->test_raise(function () use ($builtins) {PyCore::raise($builtins->ValueError, "test raise");
});

【Python 捕获】

def test_raise(fn):try:fn()except ValueError as e:return str(e)

1.4 切片语法:Python 风格的字符串操作

PHPY 提供了 PyCore::slice,支持 Python 风格的切片操作。

【示例】

$s = new PyStr("Python Programming");
$this->assertEquals($s[PyCore::slice(0, 3)], "Pyt");
$this->assertEquals($s[PyCore::slice(7, 12)], "Progr");

1.5 定义 Python Enum:PHP 类转 Python 枚举

PHPY 支持将 PHP 类直接转换为 Python 枚举类型。

【示例】

class Medium {const Glass = 1.520;const Oil = 1.515;const Water = 1.333;const Air = 1.0003;
}$medium = PyEnum(Medium::class);
PyCore::print($medium->Glass->value);

1.6 定义 Python 函数:支持注解与元数据

PHPY 新增了 PyNamedFn,允许 PHP 函数携带元数据(如注解、参数类型等)传递给 Python 库。

【示例】

#[PyImport('magicgui', 'magicgui')]
#[PyAnnotation('@magicgui(call_button="calculate", result_widget=True)')]
function snells_law($aoi, $n1, $n2, $degrees) {// 函数逻辑
}PyNamedFn('snells_law')->show(run: true);

1.7 环境变量传递:无缝集成系统变量

PHPY 支持将 PHP 的环境变量传递给 Python,确保依赖环境变量的 Python 库正常运行。

【示例】

$os = PyCore::import('os');
foreach($_ENV as $k => $v) {$os->environ[$k] = $v;
}

结语:PHPY 的未来

经过一年的迭代,PHPY 的稳定性和功能性都得到了显著提升。它不仅修复了大量细节问题,还新增了许多强大的特性,使得 PHP 开发者能够轻松调用 Python 生态中的各种功能。

借助 PHPY,PHP 语言迈上了一个新的台阶,能够触及过去无法实现的领域。

无论是 AI 模型调用、大数据处理,还是跨语言系统整合,PHPY 都为开发者提供了无限可能。

参考🔗

https://mp.weixin.qq.com/s/lxxHt_vtMDsXSNiSiNcJZg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/905052.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昆明理工大学25冶金工程考研预计调剂169人

--冶金工程考研809冶金物理化学有色冶金学有色金属冶金冶金过程及设备F002钢铁冶金学冶金调剂

平衡树-入门

本文有一只奶龙编写,有借鉴会在其中说明。 平衡树 要了解平衡树是什么,我们需要先了解一个东西:二叉搜索树(也称二叉查找树)。二叉搜索/查找树(BST)如果我们有一颗二叉树可以进行查找,那么就可以说明其中的节点一定又有一个能够区分大小的“键值”。我们有节点来存储这…

安卓工程目录结构

根目录 根目录下有多个重要的文件和文件夹,各自承担着不同的功能。.gradle 和 .idea 这两个文件夹属于 IDE(集成开发环境)生成的文件,其中 .gradle 包含 Gradle 构建系统的配置和缓存信息;.idea 则是 IntelliJ IDEA 或者 Android Studio 所产生的项目配置文件。 app 这是安…

LLM大模型:post-train实战 - 使用GRPO微调LLM

deepseek带火了GRPO,更带火了reinforcement learning,让研究人员发现RL能在pre-train的基础上较大提升LLM的逻辑推理能力!当前,互联网高速发展二十多年产生的优质数据已经使用殆尽,所以更大规模的LLM一直难产(GPT-5现在都还没发布,优质token耗尽是核心原因之一)。市面上…

MQ 消息幂等性保证

MQ 消息幂等性保证 1. 什么是幂等性 在程序开发中,是指同一个业务,执行一次或多次对业务状态的影响是一致的。例如:根据 id 删除数据 查询数据在实际业务中,避免不了出现用户连续点击退款、重复点击删除等情况,这种情况下,就需要对多个消息进行处理,避免短时间内多次执行…

3.24 曲线/曲面积分

1 第一类曲线积分 (理解成求曲线的质量) 要把ds(弧微分)转化成dt(参数方程里面的自变量)(积分里面只留下的变量),也可以转化成dx什么的,注意ds转化成dx的公式 2 第一类曲面积分 还是先求投影,比如投影到xoy平面上,就求z=z(x,y) 2.1 普通对称性奇函数为0,偶函数*2 2.…

SmolVLM2: 让视频理解能力触手可及

一句话总结: SmolVLM 现已具备更强的视觉理解能力📺 SmolVLM2 标志着视频理解技术的根本性转变——从依赖海量计算资源的巨型模型,转向可在任何设备运行的轻量级模型。我们的目标很简单: 让视频理解技术从手机到服务器都能轻松部署。 我们同步发布三种规模的模型 (22 亿/5 亿…

React-Native开发鸿蒙NEXT-video

React-Native开发鸿蒙NEXT-video 前几周的开发,基本把一个”只读型“社区开发的差不多了。帖子列表,详情,搜索都迁移实现了,但还差了一点------视频类型帖子的展示。之前开发RN社区中,对于视频的处理用的是react-native-video,这个三方组件也已经实现了鸿蒙化,部分逻辑可…

React-Native开发鸿蒙NEXT-cookie设置

React-Native开发鸿蒙NEXT-cookie设置 应用有个积分商城,做一些积分兑换的业务,就一个基于react-native-webview开发的页面,在页面加载的时候通过js注入来设置cookie带入用户信息。 早先应甲方要求web网站关闭了,现在又要继续运行。于是就把web服务启动了,然后发现应用里积…

第六天

单词 以下是今天需学习的35个单词复习,同时前几天的单词阅读 理解文章大意,记录不认识的单词。今天这个阅读非常应当下的情景。 How to Teach Yourself Anything in Less than Three Months 如何在3个月内学习任何一件事(一) Self-education can be wonderful and frustrat…

React Native开发鸿蒙Next---富文本浏览

React Native开发鸿蒙Next---富文本浏览 最近在继续开发App剩余的社区功能。地铁的社区相对较为特殊,只有公告/政策规章/操作指南等资讯阅读功能,无法进行交互。对于原先的社区RN,除了移植适配鸿蒙,还需要做大量的功能屏蔽等改造。新的社区后台大量采用富文本进行内容编辑,…

17.指针

正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。 请看下面的实例,它将输出定义的变量地址:#include <stdio.h>int main(){int var_runoob = 10;int *p; //定义指针变量p = &var…