Please wait while we load your page...

PasswordSentry

Latest Version [8.00202205221] Last Updated [May-22-2022]

Tools

PHP Manual [PHP Callbacks]

Protect Your Website Today


PHP Manual || Examples

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";
?>

The above example will output:

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.
Tip

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



PHP Manual || Examples