Callback-функции PHP

Можно присвоить замыкание PHP переменной типа "указатель" (pointer) либо передать его как аргумент функции:

<?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 
"Привет, мир 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 
"Привет, мир 2!\n";
$zend->zend_write $orig_zend_write;
echo 
"Привет, мир 3!\n";
?>

Результат выполнения данного примера:

Привет, мир 1!
{
        Привет, мир 2!
}
Привет, мир 3!
Хоть это и работает, но данная функциональность поддерживается не на всех платформах libffi, не эффективна и вызывает утечку ресурсов при завершении запросов.
Подсказка

Поэтому рекомендуется минимизировать использование callback-функций PHP.