Python
调用 PHP
函数/方法时,参数、返回值将可能存在内存拷贝,在编写性能敏感的程序时需要关注内存复制的开销。
- 整型、布尔型、浮点型、空值
None
始终为值传递 - 对象、资源、引用,始终为引用传递,不会复制内存
- 字符串、数组,将进行递归深拷贝转为原生类型
arg1 = 1234
arg2 = 1234.5678
arg3 = True
arg4 = phpy.Object('stdClass')
arg5 = phpy.Reference()
arg6 = phpy.call('fopen', "php://input", "r")
arg7 = {'hello' : 'world'}
arg8 = "hello world"
arg9 = [1, 2, 3, 4, 5]
phpy.call('test', arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
arg1
、arg2
、arg3
将转为PHP
中的整型、浮点型、布尔型,直接复制数值arg4
、arg5
、arg6
将直接传递引用到PHP
中,不会产生内存拷贝arg6
、arg7
、arg8
将遍历、深度内存拷贝,并转为PHP
的array
、string
- 整型、布尔型、浮点型、空值(
None
和null
)将转为Python
的原生类型 - 其他从
Python
中返回的内容全部为PyObject
类型 - 也可以在
PHP
代码中使用PyObject
对象类型,返回Python
原生类型实现透明转发传递
使用 phpy.String
、phpy.Array
对象,调用 PHP
函数时将不会拷贝内存。