PHP 开发者大会日本站 2024

PHP 回调函数

可以将 PHP 闭包赋值给原生函数指针类型变量,或将其作为函数参数传递。

示例 #1 将 PHP Closure 赋值给 C 函数指针

<?php
$zend
= FFI::cdef("
typedef int (*zend_write_func_t)(const char *str, size_t str_length);
extern zend_write_func_t zend_write;
"
);

echo
"Hello World 1!\n";

$orig_zend_write = clone $zend->zend_write;
$zend->zend_write = function($str, $len) {
global
$orig_zend_write;
$orig_zend_write("{\n\t", 3);
$ret = $orig_zend_write($str, $len);
$orig_zend_write("}\n", 2);
return
$ret;
};
echo
"Hello World 2!\n";
$zend->zend_write = $orig_zend_write;
echo
"Hello World 3!\n";
?>

以上示例将输出

Hello World 1!
{
        Hello World 2!
}
Hello World 3!
尽管这可以工作,但这项功能并非在所有 libffi 平台上都受支持,效率不高,并且在请求结束时会泄漏资源。
提示

因此,建议尽量减少 PHP 回调函数的使用。

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top