当前位置: 首页 > news >正文

PHP与Python无缝融合,开启跨语言开发新纪元

文章精选推荐

1 JetBrains Ai assistant 编程工具让你的工作效率翻倍
2 Extra Icons:JetBrains IDE的图标增强神器
3 IDEA插件推荐-SequenceDiagram,自动生成时序图
4 BashSupport Pro 这个ides插件主要是用来干嘛的 ?
5 IDEA必装的插件:Spring Boot Helper的使用与功能特点
6 Ai assistant ,又是一个写代码神器
7 Cursor 设备ID修改器,你的Cursor又可以继续试用了

文章正文

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

PHPY 是识沃团队推出的开源项目,旨在为 PHP 引入 Python 生态,弥补 PHP 生态的不足。通过 PHPY,PHP 开发者可以直接调用 Python 的模块和函数,极大地扩展了 PHP 的功能边界。自发布以来,PHPY 获得了国内外开发者的一致好评,并在多个场景中得到了验证。经过一年的迭代,PHPY 修复了大量内存泄漏和崩溃问题,并新增了许多强大的特性。本文将详细介绍这些新特性。

2. 新特性一览

2.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'));
2.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);
2.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)
2.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");
2.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);
2.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);
2.7 环境变量传递:无缝集成系统变量

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

示例:

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

3. 结语:PHPY 的未来

经过一年的迭代,PHPY 的稳定性和功能性都得到了显著提升。它不仅修复了大量细节问题,还新增了许多强大的特性,使得 PHP 开发者能够轻松调用 Python 生态中的各种功能。借助 PHPY,PHP 语言迈上了一个新的台阶,能够触及过去无法实现的领域。无论是 AI 模型调用、大数据处理,还是跨语言系统整合,PHPY 都为开发者提供了无限可能。

相关文章:

  • 内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP
  • C++ std::bitset
  • 【MyDB】5-索引管理之4-单元测试
  • 详解string类+迭代器
  • 【万字总结】前端全方位性能优化指南(二)——AVIF/WebP格式转换、渐进式加载、WASM解码加速
  • 【存储中间件】Redis核心技术与实战(四):Redis高并发高可用(Redis集群介绍与搭建)
  • TDengine 元数据
  • 从零开始实现 C++ TinyWebServer 异步日志系统 Log类详解
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part10
  • LIMS系统在纸制品制造的应用 内检实验室LIMS系统提升纸制品质控
  • JavaScript 数组方法大全:从基础到高级
  • IO(Input/Output)
  • GStreamer —— 3.1、Qt+GStreamer制作多功能播放器,支持本地mp4文件、rtsp流、usb摄像头等(可跨平台,附源码)
  • 新增菜品-02.代码开发2
  • 【后端】【Djagno】【ORM】models.ManyToManyField 多对多字段类型全解
  • 【设计模式】策略模式
  • EasyExcel--导入和导出Excel的方法
  • 面向机器人领域 | AKM Delta-Sigma数字输出无磁芯电流传感器
  • turnjs图册翻书效果
  • 数据仓库是什么,跟数据集成有什么关系
  • 老旧小区加装电梯后续维护谁负责?上海:各区属房管集团托底保障
  • 澎湃思想周报|《混沌少年时》与青少年社媒禁令;自雇陷阱
  • 交响4K修复版《神女》昨晚上演,观众听到了阮玲玉的声音
  • IPO周报|本周2只新股申购,比亚迪、上汽“小伙伴”来了
  • 中国旅游日|上天当个“显眼包”!体验低空经济的“飞”凡魅力
  • 中科院合肥物质院迎来新一届领导班子:刘建国继续担任院长