php中function函数(phpy,为 PHP 引入 Python 生态)PHP函数 / PHP内置函数列表...

wufei123 发布于 2024-04-15 阅读(66)

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍如果我的分享对你有帮助,请关注我,一起向上进击phpy 是识沃团队最新推出的开源项目,目标是为。

PHP引入Python生态,来弥补PHP生态的空缺和不足phpy使得PHP可以调用所有Python的包包括当下非常流行的PyTorch、transformers、TensorFlow等AI库,以及Numpy

、Pandas、Scikit等科学计算库,还可以使用PyQt、wxPython等图形界面库GitHub 地址:https://github.com/swoole/phpyGitee 地址:https://gitee.com/swoole/phpy。

不建议在  php-fpm/apache 短生命周期运行环境下使用,频繁地导入 / 销毁模块的开销会消耗大量资源编译安装phpy可以作为PHP的扩展,也可以作为Python的C模块既可以在PHP代码中调用。

Python的库,也可以在Python中调用PHP的类和函数作为  Python 模块时依赖  PHP 的  embed SAPI ,检查  PHP 的目录中,确保存在  libphp.soll/opt/php-8.1/lib/libphp.so。

-rwxr-xr-x1htfhtf3939722411月3019:25/opt/php-8.1/lib/libphp.so*编译依赖Python 3.10或以上版本,建议使用conda工具来安装PHP 8.1

或以上版本Python将安装到/opt/anaconda3目录下/opt/anaconda3/bin/pythonPython主程序/opt/anaconda3/include/python3.11头文件

/opt/anaconda3/lib/python3.11动态链接库目录另外需要配置/etc/ld.so.conf.d/conda.conf加入/opt/anaconda3/lib和/opt/php-8.1/lib

执行ldconfig检查是否可以找到libpython3.11.so和libphp.sosudo ldconfig -p |grep php libphp7.so (libc6,x86-64) => /opt/php-7.4/lib/libphp7.so。

libphp.so (libc6,x86-64) => /opt/php-8.0/lib/libphp.sosudo ldconfig -p |grep python libsamba-policy.cpython-

38-x86-64-linux-gnu.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libsamba-policy.cpython-38-x86-64

-linux-gnu.so.0 libpython3.11.so.1.0 (libc6,x86-64) => /opt/anaconda3/lib/libpython3.11.so.1.0 libpython3.

11.so (libc6,x86-64) => /opt/anaconda3/lib/libpython3.11.so libpython3.8.so.1.0 (libc6,x86-64) =>

/usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0 libpython3.8.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython

3.8.so libpython3.5m.so.1.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0 libpython3.so (libc6,x86-

64) => /opt/anaconda3/lib/libpython3.so libpython2.7.so.1.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython

2.7.so.1.0 libpython2.7.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython2.7.so作为PHP扩展检查config.m4

中Python路径是否正确若Python的安装路径不是/opt/anaconda3,需修改为正确的安装路径cdphpyphpize./configuremakeinstall安装成功后,修改php.ini。

,加入extension=phpy.so,执行php -m和php --ri phpy检查是否成功加载扩展作为Python模块cmake.make-j执行成功后,会生成tests/lib/phpy.so。

文件可以在Python中直接导入此模块import phpy使用方法导入 Python 模块$os=PyCore::import(os);执行函数$uname=$os->uname();读取属性echo。

$uname->sysname;加载路径可使用PyCore::import(sys)->path->append()将一些目录加入到加载路径列表中例如:/workspace/app/user.py自定义的包,可以通过下面的步骤实现加载:。

PyCore::import(sys)->path->append(/workspace)将/workspace添加到sys.path中PyCore::import(app.user)将自动搜索sys.path

找到对应的app/user.py包并载入内置方法PyCore::str()将对象转为字符串PyCore::repr()PyCore::type()获取对象的类型PyCore::locals()获取当前空间内容的所有局部变量

PyCore::globals()获取所有全局变量PyCore::hash()获取 Hash 值PyCore::hasattr()检测对象是否存在某个属性PyCore::id()获取对象的内部编号PyCore::len()

获取长度PyCore::dir()获取对象所有的属性、方法PyCore::int()构造一个整数PyCore::float()构造一个浮点数PyCore::fn()构造一个可调用函数PyCore::scalar()

将PyObject对象转为PHP的标量类型,例如PyStr将转为PHP 字符串,Dict/Tuple/Set/List将转为Array内置类PyObject:所有其他类型的基类PyDict:字典类型,等同于

PHP的关联数组PyList:列表类型,等同于PHP的索引数组PyTuple:元组,不可变的列表PyStr:字符串PyModule:Python包,PyModule也是PyObject的子类PyObject

是除了PyCore之外,所有其他类型的基类非内置类的对象是PyObject的实例PyObject实现了4个魔术方法,用于将操作映射到Python对象所有类方法、参数、返回值参考stubs目录中的文件继承关系

PyObject -> PyModule -> PySequenece -> PyList -> PyTuple -> PySet

-> PyStr -> PyDict -> PyType整数Python语言是天然支持无限精度整型计算的,可以使用Python的整数计算能力来代替ext-bcmath

构造使用PyCore::int()函数来构造一个数字,可以传入整数、浮点数、字符串来初始化$i1=PyCore::int(12345678);$i2=PyCore::int(1234567890123456789012345678901234567890。

);$i3=PyCore::int(12345678.03);运算整数同样也是PyObject的实例,可以使用内置的方法类实现运算$i=PyCore::int(12345435);var_dump(strval(。

$i->__pow__(3)));var_dump(strval($i->__add__(4)));将输出1881564851360655187875,由于超过了64位最大精度,因此输出结果将自动转为字符串类型。

命名参数phpy支持了命名参数,可以使用命名参数来调用Python的函数和方法顺序参数必须在前,命名参数必须在最后kwargs($a,$b,$c,name:hello,world:rango);对应的Python

代码为:kwargs(a,b,c,name:hello,world:rango)回调函数可将PHP的可调用对象作为Python的回调函数使用PyCore::fn(callable $fn)包裹即可$m=

PyCore::import(app.user);$uuid=uniqid();$rs=$m->test_callback(PyCore::fn(function ($namespace) use ($uuid

) {var_dump($namespace);return$uuid;}));import app.user导入了一个自定义Python包调用了包中的一个函数test_callback,此函数接受一个参数为

Python Callable对象使用PyCore::fn()包裹了一个Closure闭包对象作为回调,这里也支持函数名称字符串、对象方法的调用方式回调函数返回了一个字符串,在test_callback

函数中会得到一个str类型返回值可参考下方的Python tkinter例子实际案例基于tkinter实现GUI的例子

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

欧意 新闻51134