概述: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