略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: PHP Callbacks

2024-12-22

PHP Callbacks

It is possible to assign a PHP closure to a native variable of function pointer type or to pass it as a function argument:

<?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!
Although this works, this functionality is not supported on all libffi platforms, is not efficient and leaks resources by the end of request.
小技巧

It is therefore recommended to minimize the usage of PHP callbacks.

add a noteadd a note

User Contributed Notes

There are no user contributed notes for this page.

官方地址:https://www.php.net/manual/en/ffi.examples-callback.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3